2011-04-06 76 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