我有一個listview佈局,每行包含一個複選框。 當活動開始時,它顯示覆選框,其中一些默認選中。 最初,我得到正確選中的複選框。但是當我想取消選擇一些並檢查其他人時, 他們都會在我收到消息'你不能超過5個選擇!'後取消選中!來自自定義適配器。 我希望能夠檢查新盒子或取消選中一些已經從開始檢查的盒子。 的複選框的總數應小於5listview組成的複選框
佈局:single_row_item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/checkBox"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cinteretidtxt"
android:visibility="gone"/>
</LinearLayout>
定義適配器:ModCinteretsAdapter
public class ModCinteretsAdapter extends ArrayAdapter<ModCinteret>{
private ArrayList<String> selectedStrings = new ArrayList<String>();
private ArrayList<String> selectedids = new ArrayList<String>();
public ModCinteretsAdapter(Context context, ArrayList<ModCinteret> cinterets) {
super(context, 0, cinterets);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Get the data item for this position
ModCinteret cinteret = getItem(position);
// Check if an existing view is being reused, otherwise inflate the view
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.single_row_item, parent, false);
}
// Lookup view for data population
final TextView cinteretidtxt = (TextView) convertView.findViewById(R.id.cinteretidtxt);
cinteretidtxt.setText(cinteret.getId());
final CheckBox cinterettxt = (CheckBox) convertView.findViewById(R.id.checkBox);
cinterettxt.setText(cinteret.getText());
if((cinteret.getFlag()).equals("1")) {
cinterettxt.setChecked(true);
selectedStrings.add(cinterettxt.getText().toString());
selectedids.add(cinteretidtxt.getText().toString());
}else {
cinterettxt.setChecked(false);
selectedStrings.remove(cinterettxt.getText().toString());
selectedids.remove(cinteretidtxt.getText().toString());
}
cinterettxt.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
if(selectedStrings.size()<5) {
selectedStrings.add(cinterettxt.getText().toString());
selectedids.add(cinteretidtxt.getText().toString());
}else{
cinterettxt.setChecked(false);
Toast.makeText(getContext(),"You cannot have more than 5 choices!",Toast.LENGTH_LONG).show();
}
}else{
selectedStrings.remove(cinterettxt.getText().toString());
selectedids.remove(cinteretidtxt.getText().toString());
}
}
});
return convertView;
}
public ArrayList<String> getSelectedString(){
return selectedStrings;
}
public ArrayList<String> getSelectedId(){
return selectedids;
}
}
嗨,你不應該在getView中添加點擊監聽器。意見得到回收,一切都會混淆。 –
嗨Jawad。我認爲getView裏面的點擊監聽器是完全可以的。我從網上讀了一些例子 –
也許我不知道。你什麼時候更新cinteret的旗幟? –