Activity,Fragmentのベースクラスパッケージ,findViewByIdの簡略化,Fragmentの怠惰なロードと重複しないロードなど


考えたことがあって更に更新を続けて、あなた达が私に分かち合うことができることをも望みます.次のレプリケーションで使用できます.

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;
    }
}