Retain fragments and refactor. Add user list fragment programatically.

This commit is contained in:
Fernando Cejas
2016-01-30 19:07:13 +01:00
parent bd05f39083
commit 3e2e382279
8 changed files with 50 additions and 59 deletions

View File

@@ -52,7 +52,8 @@ public abstract class UseCase {
/**
* Executes the current use case.
*
* @param UseCaseSubscriber The guy who will be listen to the observable build with {@link #buildUseCaseObservable()}.
* @param UseCaseSubscriber The guy who will be listen to the observable build
* with {@link #buildUseCaseObservable()}.
*/
@SuppressWarnings("unchecked")
public void execute(Subscriber UseCaseSubscriber) {

View File

@@ -55,7 +55,7 @@ public class UserDetailsActivity extends BaseActivity implements HasComponent<Us
private void initializeActivity(Bundle savedInstanceState) {
if (savedInstanceState == null) {
this.userId = getIntent().getIntExtra(INTENT_EXTRA_PARAM_USER_ID, -1);
addFragment(R.id.fl_fragment, UserDetailsFragment.newInstance(this.userId));
addFragment(R.id.fl_fragment, UserDetailsFragment.create(this.userId));
} else {
this.userId = savedInstanceState.getInt(INSTANCE_STATE_PARAM_USER_ID);
}

View File

@@ -1,5 +1,6 @@
/**
* Copyright (C) 2014 android10.org. All rights reserved.
*
* @author Fernando Cejas (the android10 coder)
*/
package com.fernandocejas.android10.sample.presentation.view.activity;
@@ -33,6 +34,10 @@ public class UserListActivity extends BaseActivity implements HasComponent<UserC
setContentView(R.layout.activity_user_list);
this.initializeInjector();
if (savedInstanceState == null) {
addFragment(R.id.fragmentContainer, new UserListFragment());
}
}
private void initializeInjector() {

View File

@@ -1,11 +1,11 @@
/**
* Copyright (C) 2014 android10.org. All rights reserved.
*
* @author Fernando Cejas (the android10 coder)
*/
package com.fernandocejas.android10.sample.presentation.view.fragment;
import android.app.Fragment;
import android.os.Bundle;
import android.widget.Toast;
import com.fernandocejas.android10.sample.presentation.internal.di.HasComponent;
@@ -13,12 +13,6 @@ import com.fernandocejas.android10.sample.presentation.internal.di.HasComponent;
* Base {@link android.app.Fragment} class for every fragment in this application.
*/
public abstract class BaseFragment extends Fragment {
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
/**
* Shows a {@link android.widget.Toast} message.
*
@@ -33,6 +27,6 @@ public abstract class BaseFragment extends Fragment {
*/
@SuppressWarnings("unchecked")
protected <C> C getComponent(Class<C> componentType) {
return componentType.cast(((HasComponent<C>)getActivity()).getComponent());
return componentType.cast(((HasComponent<C>) getActivity()).getComponent());
}
}

View File

@@ -43,30 +43,35 @@ public class UserDetailsFragment extends BaseFragment implements UserDetailsView
@Bind(R.id.rl_retry) RelativeLayout rl_retry;
@Bind(R.id.bt_retry) Button bt_retry;
public UserDetailsFragment() { super(); }
public UserDetailsFragment() {
setRetainInstance(true);
}
public static UserDetailsFragment newInstance(int userId) {
public static UserDetailsFragment create(int userId) {
UserDetailsFragment userDetailsFragment = new UserDetailsFragment();
Bundle argumentsBundle = new Bundle();
argumentsBundle.putInt(ARGUMENT_KEY_USER_ID, userId);
userDetailsFragment.setArguments(argumentsBundle);
return userDetailsFragment;
}
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getComponent(UserComponent.class).inject(this);
}
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View fragmentView = inflater.inflate(R.layout.fragment_user_details, container, false);
final View fragmentView = inflater.inflate(R.layout.fragment_user_details, container, false);
ButterKnife.bind(this, fragmentView);
return fragmentView;
}
@Override public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
this.initialize();
@Override public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
this.userDetailsPresenter.setView(this);
this.userId = getArguments().getInt(ARGUMENT_KEY_USER_ID);
this.userDetailsPresenter.initialize(this.userId);
}
@Override public void onResume() {
@@ -89,13 +94,6 @@ public class UserDetailsFragment extends BaseFragment implements UserDetailsView
this.userDetailsPresenter.destroy();
}
private void initialize() {
this.getComponent(UserComponent.class).inject(this);
this.userDetailsPresenter.setView(this);
this.userId = getArguments().getInt(ARGUMENT_KEY_USER_ID);
this.userDetailsPresenter.initialize(this.userId);
}
@Override public void renderUser(UserModel user) {
if (user != null) {
this.iv_cover.setImageUrl(user.getCoverUrl());

View File

@@ -1,5 +1,6 @@
/**
* Copyright (C) 2014 android10.org. All rights reserved.
*
* @author Fernando Cejas (the android10 coder)
*/
package com.fernandocejas.android10.sample.presentation.view.fragment;
@@ -51,7 +52,9 @@ public class UserListFragment extends BaseFragment implements UserListView {
private UserListListener userListListener;
public UserListFragment() { super(); }
public UserListFragment() {
setRetainInstance(true);
}
@Override public void onAttach(Activity activity) {
super.onAttach(activity);
@@ -60,19 +63,22 @@ public class UserListFragment extends BaseFragment implements UserListView {
}
}
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getComponent(UserComponent.class).inject(this);
}
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View fragmentView = inflater.inflate(R.layout.fragment_user_list, container, true);
final View fragmentView = inflater.inflate(R.layout.fragment_user_list, container, false);
ButterKnife.bind(this, fragmentView);
setupUI();
return fragmentView;
}
@Override public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
this.initialize();
@Override public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
this.userListPresenter.setView(this);
this.loadUserList();
}
@@ -96,11 +102,6 @@ public class UserListFragment extends BaseFragment implements UserListView {
ButterKnife.unbind(this);
}
private void initialize() {
this.getComponent(UserComponent.class).inject(this);
this.userListPresenter.setView(this);
}
private void setupUI() {
this.usersLayoutManager = new UsersLayoutManager(getActivity());
this.rv_users.setLayoutManager(usersLayoutManager);
@@ -130,7 +131,7 @@ public class UserListFragment extends BaseFragment implements UserListView {
@Override public void renderUserList(Collection<UserModel> userModelCollection) {
if (userModelCollection != null) {
this.usersAdapter.setUsersCollection(userModelCollection);
this.usersAdapter.setUsersCollection(userModelCollection);
}
}
@@ -162,9 +163,9 @@ public class UserListFragment extends BaseFragment implements UserListView {
private UsersAdapter.OnItemClickListener onItemClickListener =
new UsersAdapter.OnItemClickListener() {
@Override public void onUserItemClicked(UserModel userModel) {
if (UserListFragment.this.userListPresenter != null && userModel != null) {
UserListFragment.this.userListPresenter.onUserClicked(userModel);
}
if (UserListFragment.this.userListPresenter != null && userModel != null) {
UserListFragment.this.userListPresenter.onUserClicked(userModel);
}
}
};
}

View File

@@ -3,11 +3,10 @@
android:layout_height="match_parent"
>
<fragment
android:name="com.fernandocejas.android10.sample.presentation.view.fragment.UserListFragment"
android:id="@+id/fragmentUserList"
<FrameLayout
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
</RelativeLayout>

View File

@@ -1,19 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
android:layout_height="match_parent">
<include
layout="@layout/view_user_details"
/>
<include layout="@layout/view_user_details" />
<include
layout="@layout/view_progress"
/>
<include layout="@layout/view_progress" />
<include
layout="@layout/view_retry"
/>
<include layout="@layout/view_retry" />
</RelativeLayout>
</RelativeLayout>