我有一个 ListView,每行都有一个 TextView 和一个 Checkbox。我正在尝试创建一个序列,用户必须单击第一行的复选框以启用下一行并删除灰色效果。单击此行中的复选框将对下一行执行相同的操作,依此类推。
这可能吗?如何?
创建自定义Object
以保持行的状态。例如:
class Row {
private TextView text;
private CheckBox box;
private boolean grayedOut;
//implementation...
}
在您的内部您Activity
制作一个ArrayList<Row>()
并将其作为Adapter
您的ListView
.
onCreate(..){
mArrayList = new ArrayList<Row>();
// fill arraylist
Adapter mAdapter = new CustomAdapter(... , ... , mArrayList);
ListView lv = findView..
lv.setAdapter(mAdapter);
}
为Adapter
您ListView
定制。您可以按照此处找到的示例进行操作。在您的情况下,一些调整将如下:
public class CustomAdapter extends ArrayAdapter<Row>{
public CustomAdapter(...) {
// do stuff
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// ....
if (item at position has gray state){
set layout to gray
} else {
set layout to active
}
// ....
return row;
}
现在我们有一个Listview
, aCustomAdapter
并且对于列表中的每个项目我们都有一个Row
提供特定状态的。默认所有状态都将设置为灰色状态,除了第一项。使用onItemClickedListener
,我们可以解锁其他物品..
lv.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> parent, View v, int position, Long id){
// do stuff...
mArrayList.get(position+1).setGrayedOut(false);
}
}
祝你好运!