[英]How to restrict the checked checkbox in a ListView?
我正在嘗試將列表視圖上的選定復選框限制為 3 個選定項目,如果選定的框已經是 3 個,我想禁用對另一個列表的任何單擊。如何做到這一點?
我一直試圖根據非常相似問題的答案來解決它。 但它仍然沒有奏效。 所有的代碼都會變成錯誤
無法解析方法“setOnItemSelectedListener” 。
這是我迄今為止完成的second.java類的代碼。
package com.example.imah.uid;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckedTextView;
import android.widget.ListView;
import android.widget.Toast;
public class second extends AppCompatActivity {
ListView listview ;
String[] pStyle = new String[] {
"Fashion",
"HDR",
"Hi Speed",
"Landscape",
"Portrait",
"Street",
"Wedding"
};
SparseBooleanArray sparseBooleanArray ;
private int numberOfCheckboxesChecked;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
listview = (ListView)findViewById(R.id.listView2);
ArrayAdapter<String> adapter = new ArrayAdapter<String>
(second.this,
android.R.layout.simple_list_item_multiple_choice,
android.R.id.text1, pStyle );
listview.setAdapter(adapter);
listview.setOnItemSelectedListener(new onItemSelectedListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked && numberOfCheckboxesChecked >= 4) {
checkbox1.setChecked(false);
} else {
if (isChecked) {
numberOfCheckboxesChecked++;
} else {
numberOfCheckboxesChecked--;
}
}
}
});
}
}
我正在處理一個項目並遇到了這個問題,但我遇到的第一個答案是,如果您達到最大數量的復選框,然后選擇任何其他復選框 2 或 3 次,它會讓您選擇它。 我不知道為什么會這樣,但后來我知道 listView 它自己已經檢查了方法並且正常工作沒有任何錯誤。
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_multiple_choice, SODA);
ListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String selected = (String) ListView.getItemAtPosition(position);
if (arrayList.contains(selected)) {
arrayList.remove(selected);
ListView.setItemChecked(position, false);
} else if (arrayList.size() < MAX_SELECTABLE) {
arrayList.add(selected);
ListView.setItemChecked(position, true);
} else {
Toast.makeText(UserSelectionActivity.this, "You can\'t select more than " + MAX_SELECTABLE + " items", Toast.LENGTH_SHORT).show();
ListView.setItemChecked(position, false);
}
}
});
試試這個:
public class Second extends AppCompatActivity {
ListView listview;
String[] pStyle = new String[]{
"Fashion",
"HDR",
"Hi Speed",
"Landscape",
"Portrait",
"Street",
"Wedding"
};
private static final int MAX_SELECTABLE = 3;
List<String> mSelected = new ArrayList<>();
SparseBooleanArray sparseBooleanArray;
private int numberOfCheckboxesChecked;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
listview = (ListView) findViewById(R.id.listView2);
ArrayAdapter<String> adapter = new ArrayAdapter<String>
(this,
android.R.layout.simple_list_item_multiple_choice,
android.R.id.text1, pStyle);
listview.setAdapter(adapter);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) {
CheckedTextView ctv = (CheckedTextView) view;
if (ctv.isChecked()) {
mSelected.remove(pStyle[pos]);
ctv.setChecked(false);
} else if (mSelected.size() < MAX_SELECTABLE) {
mSelected.add(pStyle[pos]);
ctv.setChecked(true);
} else {
Toast.makeText(Second.this, "You can\'t select more than " + MAX_SELECTABLE + " items", Toast.LENGTH_SHORT).show();
}
}
});
}
}
以這種方式使用:
ArrayAdapter<String> adapter = new ArrayAdapter<String>
(second.this,
android.R.layout.simple_list_item_multiple_choice,
android.R.id.text1, pStyle );
listview.setAdapter(adapter);
listview.setOnItemSelectedListener(new onItemSelectedListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
if(numberOfCheckboxesChecked=>4){
checkbox1.setChecked(false);
}
else{
numberOfCheckboxesChecked++;
}
} else {
numberOfCheckboxesChecked--;
}
}
}
});
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.