Androidのクイック開発フレームワークをどのように構築するかのUI編(上)

5041 ワード

前編に続き、UI層でのデザインを共有し続けます.
UIはユーザインタフェース、すなわちユーザインタフェース、すなわちユーザに表示される部分である.Androidでは、UI部分にはActivity、Fragment、インタラクティブなViewが含まれています.ビューにとって最も一般的なのは、RecyclerView、ListViewなどのリストコントロールにほかならない.
従って、XDroidのUI層でのパッケージは、主にActivity、Fragment、ListAdapter、RecyclerView、およびLoading、Error、Empty、Contentの4つの状態を含むコントロールQTContentLayot&XRecyclerContentLayoutがある.
ダイアログボックスなどのカスタムコントロールのサポートをキャンセルし、他の実装方法を選択することができます.
Activity & Fragment
Activity&Fragmentは異なるライフサイクルを持っていますが、一定の類似性を持っています.ActivityにはonCreate、onResume、onPause、onStop、onDestoryなどがあり、FragmentにはonCreateView、onViewCreated、onAttach、onDetach、onDestroyViewなどがあります.
通常、BaseActivity&BaseFragmentなどのベースクラスを作成します.BaseActivityでは、通常、次の方法が含まれます.
abstract void initData(Bundle savedInstanceState);
abstract void setListener();
abstract int getLayoutId();
void showLoadingDlg();
void dismissLoadingDlg();
void showPromtDlg();
void dimissPromtDlg();
...

Activity&Fragmentが一貫性を保つために、インタフェースUiCallbackを抽出し、以下の定義を行います.
public interface UiCallback {
    void initData(Bundle savedInstanceState);

    void setListener();

    int getLayoutId();

    boolean useEventBus();
}

2つのベースクラスXActivity&XFragmentを定義し、UiCallbackインタフェースを実装します.
public abstract class XActivity extends AppCompatActivity   implements UiCallback{
}

public abstract class XFragment extends Fragment implements UiCallback{
}

Abstractとして定義されるため、これらの方法はサブクラス実装を必要とする.
ここまで書いて、私の心得を共有して、時々UserFragmentをしましたが、業務調整に伴い、FragmentをActivityに変更する必要があります.現在の処理があれば、UserFragment extends XActivityを直接修正することができます.どうですか、便利ですか...
また、一般的には、ベースクラスActivity&Fragmentで一般的なメソッドを定義します.これらのメソッドの多くは同じで、コピーを繰り返す必要があり、メンテナンスが悪いです.二つ目は、大量の公共方法がその中に積み上げられ、メンテナンスが悪いことです.この問題を解決するためにも、拡張を容易にするためにも、私はやはりインタフェースを使っています.
一般的な方法を含むインタフェースUiDelegateを定義する.
public interface UiDelegate {

    void resume();
    void pause();
    void destory();

    void visible(boolean flag, View view);
    void gone(boolean flag, View view);
    void inVisible(View view);

    void toastShort(String msg);
    void toastLong(String msg);

}

ここでは,XActivity&XFragmentにもUiDelegateインタフェースを実装させると,冗長性を解消する効果が得られないようにそれぞれ実装する必要があるという問題を考えた.どうやってこの問題を解決しますか?
UiDelegateの基本的な実装UiDelegateBaseを作ることができると思います.XActivity&XFragmentに実力を残すだけでいいと思います.便宜上、Contextを入れました.
public class UiDelegateBase implements UiDelegate {

    public Context context;

    private UiDelegateBase(Context context) {
        this.context = context;
    }

    public static UiDelegateBase create(Context context) {
        return new UiDelegateBase(context);
    }

    @Override
    public void resume() {

    }

    @Override
    public void pause() {

    }

    @Override
    public void destory() {

    }

    @Override
    public void visible(boolean flag, View view) {
        if (flag) view.setVisibility(View.VISIBLE);
    }

    @Override
    public void gone(boolean flag, View view) {
        if (flag) view.setVisibility(View.GONE);
    }

    @Override
    public void inVisible(View view) {
        view.setVisibility(View.INVISIBLE);
    }

    @Override
    public void toastShort(String msg) {
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void toastLong(String msg) {
        Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
    }

}

XActivity&XFragmentでは、
protected UiDelegate getUiDelegate() {
        if (uiDelegate == null) {
            uiDelegate = UiDelegateBase.create(this);
        }
        return uiDelegate;
    }

サブクラスで呼び出すだけ
getUiDelegate.toastLong(msg)

などの方法でいいです.
なぜnew UiDelegate(context)を定義する方式を採用しないのか、nullが発生する可能性があり、怠け者モードで作成すると効果的に解消されるからです.
便宜上、XActivity&XFragmentにはイベント購読が統合されており、ButterKnife、EventBusが内蔵されています.
 @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.context = this;

        if (getLayoutId() > 0) {
            setContentView(getLayoutId());
            unbinder = KnifeKit.bind(this);
        }
        setListener();
        initData(savedInstanceState);
    }
    
     @Override
    protected void onStart() {
        super.onStart();
        if (useEventBus()) {
            BusFactory.getBus().register(this);
        }
    }
    
    @Override
    protected void onStop() {
        super.onStop();
        BusFactory.getBus().unregister(this);
    }

書き換え可能なuseEventBusメソッドは、現在のActivity&FragmentがEventBusを使用するかどうかを決定する.
EventBusは3.0バージョンを使用しています
具体的には、ソースコードを読むことができます.XDroid、レベルが限られているため、いくつかの不適切な場所が現れる可能性があります.指摘を歓迎します.
XDroid業は基本的に成熟しており、star、forkを歓迎し、貴重な意見を提出します.これはプロジェクトのアドレスです.https://github.com/limedroid/XDroid
次はListAdapterとRecylcerViewのパッケージについてお話しします.