[英]Adding OnClickListener to Multiple Choice ListView
我的應用程序具有一個“多項選擇列表視圖”,可以在其中選擇多個元素。 我創建了一個SparseBooleanArray來存儲是否單擊了不同的元素,但是不確定如何對此實現OnClickListener。
public class ListOfMajors extends Activity {
public static boolean aerospace, agricultural, biomed, chem, civil, computer, electrical, physics, environment, industrial, materials, mechanical;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.majorslist);
ListView mylist = (ListView) findViewById(R.id.majorslist);
String[] list={"Aerospace Engineering","Agricultural Engineering","Biomedical Engineering","Chemical Engineering","Civil Engineering",
"Computer Engineering","Electrical Engineering","Engineering Physics","Environmental Engineering","Industrial Engineering",
"Materials Engineering","Mechanical Engineering"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(ListOfMajors.this,android.R.layout.simple_list_item_multiple_choice,list);
mylist.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
mylist.setAdapter(adapter);
SparseBooleanArray checkedItems = mylist.getCheckedItemPositions();
if (checkedItems!= null){
for(int i=0; i<checkedItems.size();i++){
if(checkedItems.valueAt(0)){
aerospace = true;
}
if(checkedItems.valueAt(1)){
agricultural = true;
}
if(checkedItems.valueAt(2)){
biomed = true;
}
if(checkedItems.valueAt(3)){
chem = true;
}
if(checkedItems.valueAt(4)){
civil = true;
}
if(checkedItems.valueAt(5)){
computer = true;
}
if(checkedItems.valueAt(6)){
electrical = true;
}
if(checkedItems.valueAt(7)){
physics = true;
}
if(checkedItems.valueAt(8)){
environment = true;
}
if(checkedItems.valueAt(9)){
industrial = true;
}
if(checkedItems.valueAt(10)){
materials = true;
}
if(checkedItems.valueAt(11)){
mechanical = true;
}
}
}
}
}
我知道這里有很多類似的問題,但是我仍然不確定該如何處理。 我該怎么辦?
請像這樣刪除可怕的循環:-)
boolean[] mItemState;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.majorslist);
ListView mylist = (ListView) findViewById(R.id.majorslist);
final String[] list={"Aerospace Engineering","Agricultural Engineering",
"Biomedical Engineering","Chemical Engineering","Civil Engineering",
"Computer Engineering","Electrical Engineering","Engineering Physics",
"Environmental Engineering","Industrial Engineering",
"Materials Engineering","Mechanical Engineering"};
mItemState = new boolean[list.length]
ArrayAdapter<String> adapter = new ArrayAdapter<String>(ListOfMajors.this,android.R.layout.simple_list_item_multiple_choice,list);
mylist.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
myList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Toggle the state
mItemState[position] = !mItemState[position];
if (mItemState[position])
Log.d("onItemClick","Major " + list[position] + " has been selected");
else
Log.d("onItemClick","Major " + list[position] + " has been deselected");
}
});
mylist.setAdapter(adapter);
}
基本上,所有專業都設置為特定索引(從0開始),並且其選中狀態保存在mItemState數組內。 每次您單擊列表內的項目時,都會切換狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.