Activity,Fragmentのベースクラスパッケージ,findViewByIdの簡略化,Fragmentの怠惰なロードと重複しないロードなど
6331 ワード
考えたことがあって更に更新を続けて、あなた达が私に分かち合うことができることをも望みます.次のレプリケーションで使用できます.
Activity
public class BaseActivity extends AppCompatActivity {
/**
* activity
* @param context
* @param cls Activity
*/
public void myStartActivity(Context context, Class> cls) {
Intent intent = new Intent(context, cls);
startActivity(intent);
}
// find
protected T find(int viewId) {
return (T) findViewById(viewId);
}
}
Fragmentは怠惰なロードを実現し、重複しないロードを実現する。
/**
* Fragment
* Created by SwmIsMe on 2017/2/21.
*/
public abstract class BaseFragment extends Fragment {
/**
* Fragment
*/
public boolean isVisible;
/**
* inflate view
*/
public View mView;
/**
* findViewById
*
* @param viewId
* @param
* @return
*/
protected T find(int viewId) {
return (T) mView.findViewById(viewId);
}
/**
* setUserVisibleHint onCreateView
* Fragment
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
/**
*
*/
if (getUserVisibleHint()) {
isVisible = true;
onVisible();
} else {
isVisible = false;
onInvisible();
}
}
/**
*
*/
private void onVisible() {
lazyLoad();
}
/**
*
*/
private void onInvisible() {
}
/**
*
*
*/
public abstract void lazyLoad();
}
具体的なFragment
public class MyFragment extends BaseFragment {
/**
* ,
*/
private boolean isPrepared;
/**
* ,
*/
private boolean mHasLoadedOnce;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
if (mView == null) {
// inflate Fragment
mView = inflater.inflate(R.layout.frag_home_live, container, false);
initView();
isPrepared = true;
//
lazyLoad();
}
// mView parent, parent parent , mView parent 。
ViewGroup parent = (ViewGroup) mView.getParent();
if (parent != null) {
parent.removeView(mView);
}
return mView;
}
/**
*
*/
private void initView() {
find(R.id.);
}
@Override
public void lazyLoad() {
if (!isPrepared || !isVisible || mHasLoadedOnce) {
return;
}
//
mHasLoadedOnce = true;
}
}