2016-12-20 4 views
0

の選択をアンドロイドlistivewに限定したい場合、例えば3つの位置のチャックボックスを選択した場合はチェックボックスを2つ選択する必要があります。 。Androidのリストボックスの選択を制限する3つの位置リストの位置を1にするチェックボックスは自動的に削除する

ユーザーはリストから2つのチェックボックスを選択できますが、これを行うにはどうすればよいですか?

code

public class ListAdapter extends ArrayAdapter<ListModel> { 

    private ListModel listModel; 
    private int selectedItemCounter = 0; 

    public ListAdapter(Context context, List<ListModel> listModels) { 
     super(context, 0, listModels); 
    } 

    @NonNull 
    @Override 
    public View getView(final int position, View convertView, @NonNull ViewGroup parent) { 
     listModel = getItem(position); 
     if (convertView == null) { 
      convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_view_item_row, parent, false); 
     } 
     TextView productTitle = (TextView) convertView.findViewById(R.id.product_title); 
     TextView productDescription = (TextView) convertView.findViewById(R.id.product_description); 
     final CheckBox icon_right = (CheckBox) convertView.findViewById(R.id.icon_right); 
     LinearLayout Listener = (LinearLayout) convertView.findViewById(R.id.list_view_listener); 

     Listener.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       icon_right.performClick(); 
      } 
     }); 
     icon_right.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (isChecked) { 
        selectedItemCounter++; 
       } else { 
        selectedItemCounter--; 
       } 
       if (selectedItemCounter >= 3) { 
        buttonView.setChecked(false); 
        selectedItemCounter--; 
        notifyDataSetChanged(); 
       } 
      } 
     }); 


     icon_right.setChecked(false); 
     productTitle.setText(listModel.product); 
     productDescription.setText(listModel.productDetails); 
     // icon_right.setImageResource(R.drawable.icon_save); 
     return convertView; 
    } 
} 
+0

3つ目の 'CheckBox'をチェックすると、' CheckBox'のチェックを外して 'selectedItemCounter'を減らします。しかし、 'buttonView.setChecked(false)'は、 'selectedItemCounter'をもう一度デクリメントする' onCheckedChanged'コールバックをトリガします。私は、 'if'節のデクリメント呼び出しを取り除くと助けになると思います。 –

答えて

0

これを試してみてください:助け

public class ListAdapter extends ArrayAdapter<ListModel>{ 

private ListModel listModel; 
private ArrayList<Integer> selectedPos = new ArrayList<Integer>(); 

public ListAdapter(Context context, List<ListModel> listModels) { 
    super(context, 0, listModels); 
} 

@NonNull 
@Override 
public View getView(final int position, View convertView, @NonNull ViewGroup parent) { 
    listModel = getItem(position); 
    if (convertView == null) { 
     convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_view_item_row, parent, false); 
    } 
    TextView productTitle = (TextView) convertView.findViewById(R.id.product_title); 
    TextView productDescription = (TextView) convertView.findViewById(R.id.product_description); 
    final CheckBox icon_right = (CheckBox) convertView.findViewById(R.id.icon_right); 
    LinearLayout Listener = (LinearLayout) convertView.findViewById(R.id.list_view_listener); 

    Listener.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      icon_right.performClick(); 
     } 
    }); 
    icon_right.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      CheckBox cb = (CheckBox) v; 
      if (cb.isChecked()) { 
       selectedPos.add((Integer)v.getTag()); 
      } else { 
       selectedPos.remove((Integer)v.getTag()); 
      } 
      if (selectedPos.size() >= 3) { 
       selectedPos.remove(0); 
       notifyDataSetChanged(); 
      } 
     } 
    }); 

    productTitle.setText(listModel.product); 
    productDescription.setText(listModel.productDetails); 

    if(selectedPos.contains(position)){ 
     icon_right.setChecked(true); 
    }else{ 
     icon_right.setChecked(false); 
    } 

    icon_right.setTag(position); 
    return convertView; 
}} 

希望ここに私の要旨ファイルです!

関連する問題