我用android记事本教程代码开始。在我的notes_row.xml中,我有一个textview来显示note的标题,以及一个最初由android隐藏的复选框:visibility =“gone”
我希望当用户打开选项菜单并单击标记时,列表中每个项目前面的复选框将变为可见。但是,当我单击模拟器中的标记时,只有第一个音符的复选框变为可见。所以,我想迭代整个列表,并设置setVisibility(0),以便所有复选框都可见。我是初学者,所以请详细回答。提前谢谢。
我的代码段:
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch(item.getItemId()) {
case INSERT_ID:
createNote();
return true;
case MARK_ID:
// only first item check box appears with following 2 lines:
CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox1);
checkBox.setVisibility(0);
/* tried the following, but no chekbox appears with this:
Cursor c = mDbHelper.fetchAllNotes();
c.moveToPosition(0);
while(c.isAfterLast()){
CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox1);
checkBox.setVisibility(0);
c.moveToNext();
}
*/
return true;
}
阅读答案后我的新代码仍然只显示第一项的复选框:
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch(item.getItemId()) {
case INSERT_ID:
createNote();
return true;
case MARK_ID:
CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox1);
String[] lvItems = new String[]{NotesDbAdapter.KEY_TITLE};
MyAdapter arrAdapter = new MyAdapter(this, android.R.layout.simple_list_item_multiple_choice, lvItems);
arrAdapter.toggleCheckBoxVisibility(checkBox);
arrAdapter.notifyDataSetChanged();
return true;
return super.onMenuItemSelected(featureId, item);
}
这是我的适配器:
private class MyAdapter extends ArrayAdapter<String>{
public MyAdapter(Context context, int textViewResourceId,
String[] objects) {
super(context, textViewResourceId, objects);
// TODO Auto-generated constructor stub
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.notes_row, parent, false);
//String[] from = new String[]{NotesDbAdapter.KEY_TITLE};
return row;
//return super.getView(position, convertView, parent);
}
public boolean toggleCheckBoxVisibility(CheckBox checkBox){
checkBox.setVisibility(0);
super.notifyDataSetChanged();
return true;
}
}
答案 0 :(得分:0)
这大致是您与列表的每个视图进行交互所必须做的事情
编辑:更具体地说: 在你的活动主线程中
MyAdapter a= (MyAdapter) this.getArrayAdapter();
//count how many views you have to iterate and build a for loop accordingly
for(...){
View v = a.getView(/*based on the for index position */).setVisibility(View.VISIBLE)
//Do something else with the view if you want...
此解决方案假设您已经创建了数组适配器并将其与您的活动相关联。
答案 1 :(得分:0)
在适配器中创建一个方法,为可见性设置布尔标志。在按钮上单击调用该方法并将标志设置为true。然后使用notifyDataSetChanged()
更新您的列表。
在getView方法中,您可以将复选框的可见性设置为布尔标志中的值。
答案 2 :(得分:0)
试试这个: 在你的课上写下这段代码:
@Override
protected void onStart() {
super.onStart();
ArrayAdapter<String> araAdapter=new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_list_item_multiple_choice, xmlList);
listView_xml.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listView_xml.setAdapter(araAdapter);
}
xmlList是您保存的数据或您的字符串[]数组。 listview_xml是你的listview的名字。 Go through this tutorial implementing multiple check boxes