0

listview に customadpater を設定するアクティビティがあります。アダプターは、(ボタン、テキストビュー、シークバー...) を含むレイアウトを膨張させます。

ボタンのクリックリスナー、テキストビューの更新、およびシークバーのサムをアダプターの getView() メソッド内ではなくアクティビティで処理する必要があります。

私の活動とアダプターは異なるクラスです。ここで適切なデザインを採用する必要があります。

4

2 に答える 2

1

これを実装するための最良の設計は、@Autocrab によって提案されたことを実行することであり、これを実行するコードは次のようになります。

public class ParentClass implements View.onClickListener {

    public void onCreate(Bundle savedInstanceState) {
        MyAdapter mAdapter = new MyAdapter(this, list);
        // MORE AND MORE AND MORE
    }

public class MyAdapter {

    onClickListener mListener;

    public MyAdapter (ParentClass activity, List<?> list) {
        mListener = (onClickListener)activity;
        // MORE AND MORE
    }

    public View getView(...) {
        lButton.setOnClickListener(mListener);
    }
}

そのようなコードの唯一の問題は、すべての海岸で避けるべき巡回参照です。

そのためには、おそらくWeakRefrencesを使用する必要があります。

a を使用するときは、WeakReference次のように、取得する前に毎回 null でないことを確認することが非常に重要です。

public class MyAdapter {

    WeakReference<OnClickListener> mListener;

    public MyAdapter (ParentClass activity, List<?> list) {
        mListener = new WeakReference<OnClickListener>(onClickListener)activity;
        // MORE AND MORE
    }

    public View getView(...) {
        lButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mListener.get() != null) {
                    mListener.get().preformClick(v);
                }
            }
        });
    }
}
于 2013-09-20T11:13:54.270 に答える
0

アクティビティにボタン (onclick)、シークバー (onprogress) のインターフェイスを実装します。次に、これらのインターフェイスをアダプターのコンストラクターに渡します。メソッドでgetView()、これらのリスナーをビューに割り当てます。

于 2013-09-20T11:02:57.607 に答える