0

我有一个 ListView,每行都有一个 TextView 和一个 Checkbox。我正在尝试创建一个序列,用户必须单击第一行的复选框以启用下一行并删除灰色效果。单击此行中的复选框将对下一行执行相同的操作,依此类推。

这可能吗?如何?

4

1 回答 1

1

创建自定义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);
}

AdapterListView定制。您可以按照此处找到的示例进行操作。在您的情况下,一些调整将如下:

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);
    }
}

祝你好运!

于 2012-08-22T08:37:45.843 回答