私はリストビューを収容するアクティビティクラスにコードを移動する方法に見てきたが、それはそれは複雑になる唯一の理由は、あなたがやっていることである
不可能か、非常に複雑どちらかですアダプター内であまりにも多くの。
アクティビティにコードを移動したいなかった場合、方法は、あなたは、アダプタを持っているいくつかの特定のItem
クラスで、例えばインターフェース
を使用することです。
// ... BaseAdapter, ArrayAdapter, RecyclerView.Adapter... Same difference
public class YourAdapter extends BaseAdapter {
public interface OnItemActionListener {
void onItemEdited(Item x);
void onItemAdded(Item x);
void onItemClicked(Item x);
// etc.
}
public OnItemActionListener listener; // should make private with a setter method
...
// somewhere in the adapter
Item x = getItem(position);
if (listener != null) {
listener.onItemClicked(item);
}
...
}
あなたのアクティビティはそのインターフェイスを実装できます。
public YourActivity extends Activity
implements YourAdapter.OnItemActionListener {
@Override
public void onItemClicked(Item x) {
Log.d("item click", String.valueOf(x));
}
@Override
public void onItemAdded(Item x) {
Log.d("item added", String.valueOf(x));
}
@Override
protected void onCreate(Bundle b){
super.onCreate(b);
setContentView... ;
adapter = new YourAdapter... ;
adapter.listener = this; // Should use a setter method instead
}
}
この
については、複数のonclicks
を持っているあなたが唯一onClick(View v)
のための一つのインタフェースを必要とし、あなたが何を参照するために、任意のR.id
値に対してv.getId()
を確認することができます正常ですがクリックされています。
コードを見ずに答えるのは難しいです... –
はよく書かれたコードではないようですが、行がありません... – snachmsm
それは唯一の機能のときにあなたが多くのビジネスロジックをアダプタに入れているようですデータを表すビューを返します。私の意見では、はい、あなたはそれにあまりにも多くを入れています。懸念の練習をする。 – DeeV