2017-06-23 4 views
0

私はAdapterを使ってクイズを行い、各項目に複数のボタンを使用しようとしています。私はtstA ImageViewのためにonClickListenerを使います。クリック後、イメージは変更されますが、他のtstA ImageViewsイメージも変更されます(4つのアイテムごとに1つ)。これを行う正しい方法は何ですか?アダプターを使用してアイテムのビューのクリックリスナーを処理する方法は?

Picture of Activity

ここTestAdapterの私のコードです:

public class TestsAdapter extends ArrayAdapter<TestsItem>{ 
    Activity holder; 
    int layoutResourceId; 
    TestsItem item[]; 

    public TestsAdapter(Context ctx, int resource, TestsItem[] testItem){ 
     super (ctx,resource,testItem); 
     holder = (Activity)ctx; 
     layoutResourceId = resource; 
     item = testItem; 
    } 

    @Override 
    public View getView(final int position, View convertView, final ViewGroup parent) { 

     if (convertView==null){ 
      LayoutInflater inflate = holder.getLayoutInflater(); 
      convertView = inflate.inflate(layoutResourceId,parent,false); 
     } 

     final ImageView tstA = (ImageView) convertView.findViewById(R.id.tstA); 
     final ImageView tstB = (ImageView) convertView.findViewById(R.id.tstB); 
     final ImageView tstC = (ImageView) convertView.findViewById(R.id.tstC); 
     final ImageView tstD = (ImageView) convertView.findViewById(R.id.tstD); 

     tstA.setBackgroundResource(item[position].Test1); 
     tstB.setBackgroundResource(item[position].Test2); 
     tstC.setBackgroundResource(item[position].Test3); 
     tstD.setBackgroundResource(item[position].Test4); 

     tstA.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       tstA.setImageResource(R.drawable.test_item_blue); 
       tstB.setImageResource(R.drawable.test_item_empty); 
       tstC.setImageResource(R.drawable.test_item_empty); 
       tstD.setImageResource(R.drawable.test_item_empty); 
      } 
     }); 

     return convertView; 
    } 
} 

答えて

0

あなたitem[position].Test1item[position].Test2は、あなたが背景として設定した描画可能資源であると仮定。

このようにonClickListenerを変更する必要があります。

tstA.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     item[position].Test1 = R.drawable.test_item_blue; 
     item[position].Test2 = R.drawable.test_item_empty; 
     item[position].Test3 = R.drawable.test_item_empty; 
     item[position].Test4 = R.drawable.test_item_empty; 

     notifyDataSetChanged(); 
    } 
}); 

リスト項目画像の適切なトラックを取得するには、アダプタで渡す配列項目を変更する必要があります。 notifyDataSetChangedに電話すると、変更内容がリストに反映されます。

関連する問題