2011-04-06 31 views
0

我在失败之前很短暂,尽管我相信我的问题的解决方案并不困难。 我有一个ListView这是去串/ 的ArrayList。该视图中的每行包含两个textview和一个Checkbox。复选框状态应该考虑这个项目是否会被观察。对于listView代码,你可以检查我的previous question:对Checkbox的反应点击Cutsom ListView

特定的行是在我的CustomSettingsAdapter中创建的,它扩展了BaseAdapter。因此它包含一个SettingItems的ArrayList。

private static ArrayList<SettingItem> settingsArrayList; 
private LayoutInflater mInflater; 

public CustomSettingsAdapter(Context context, ArrayList<SettingItem> sitems) 
{ 
    settingsArrayList = sitems; 
    mInflater = LayoutInflater.from(context); 
} 

public int getCount() 
{ 
    return settingsArrayList.size(); 
} 

public Object getItem(int position) 
{ 
    return settingsArrayList.get(position); 
} 

public ArrayList<SettingItem> getItemList() 
{ 
    return settingsArrayList; 
} 

public long getItemId(int position) 
{ 
    return position; 
} 

public View getView(final int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    if (convertView == null) 
    { 
     convertView = mInflater.inflate(R.layout.settings_item, null); 
     holder = new ViewHolder(); 
     holder.txtName = (TextView) convertView.findViewById(R.id.setting_name); 
     holder.details = (TextView) convertView.findViewById(R.id.setting_detail); 
     holder.cb = (CheckBox) convertView.findViewById(R.id.check); 
     convertView.setTag(holder); 
    } 
    else 
    { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.txtName.setText(settingsArrayList.get(position).getName()); 
    holder.details.setText(settingsArrayList.get(position).getPath()); 
    holder.cb.setChecked(settingsArrayList.get(position).getState()); 


    holder.cb.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 

    return convertView; 

我的想法是刚刚更改适配器ArrayList中,然后给它的活动,它可以与原来的名单,这以后即可正常进行序列匹配。但我不明白它是如何工作的,以及我在网上发现的知识和事情。 非常感谢您提前帮助我! 问候托比

编辑:onCheckedChangeListener:

holder.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

      settingsArrayList.get(position).setState(isChecked); 
      notifyDataSetChanged(); 
     } 
    }); 

试了一下还与cd.setID和接收到的实际位置与cb.getID ArrayList的,但它有同样的问题返回。

回答

0

试试这个:

holder.checkBoxListView 
      .setOnCheckedChangeListener(new android.widget.CompoundButton.OnCheckedChangeListener() { 

       @Override 
       public void onCheckedChanged(CompoundButton buttonView, 
         boolean isChecked) { 

      //code for making the listItem invisible. 
       } 

      }); 
+0

好吧,这给我带来了不积跬步前进,我认为...但它仍然没有工作,我现在首先设置适当的实际位置的CB的ID。并且在onCheckListener中,我改变了与Checkbox ID匹配的位置的Item的状态。然后调用notifyDataSetChanged()。我还在做什么错了?谢谢! – 2011-04-06 12:11:45

+0

嘿,首先让我确认你想在onCheckedChangedListener中做什么动作?是隐藏相应的listitem还是将它从arraylist中删除,以便它不显示在ListView中? – 2011-04-07 11:55:12