listview に customadpater を設定するアクティビティがあります。アダプターは、(ボタン、テキストビュー、シークバー...) を含むレイアウトを膨張させます。
ボタンのクリックリスナー、テキストビューの更新、およびシークバーのサムをアダプターの getView() メソッド内ではなくアクティビティで処理する必要があります。
私の活動とアダプターは異なるクラスです。ここで適切なデザインを採用する必要があります。
listview に customadpater を設定するアクティビティがあります。アダプターは、(ボタン、テキストビュー、シークバー...) を含むレイアウトを膨張させます。
ボタンのクリックリスナー、テキストビューの更新、およびシークバーのサムをアダプターの getView() メソッド内ではなくアクティビティで処理する必要があります。
私の活動とアダプターは異なるクラスです。ここで適切なデザインを採用する必要があります。
これを実装するための最良の設計は、@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);
}
}
});
}
}
アクティビティにボタン (onclick)、シークバー (onprogress) のインターフェイスを実装します。次に、これらのインターフェイスをアダプターのコンストラクターに渡します。メソッドでgetView()
、これらのリスナーをビューに割り当てます。