2013-08-25 98 views
0

問題: 使用api得到了我正在處理複雜的應用程序。 API調用包括處理提供API的響應轉換成一個ListView看起來像這樣:Android:用於ActionMode的CheckBox OnChecked偵聽器

enter image description here

所以對於在ListView這種類型的佈局是需要一個定製的(ArrayList的)適配器,其代碼如下:

public class ArrayListAdapter extends BaseAdapter{ 

    public Context mContext; 
    public LayoutInflater mInflater; 
    public ArrayList<HashMap<String,String>> mData; 
    private SparseBooleanArray mSelectedItemsIds; 


    public ArrayListAdapter(Context context, ArrayList<HashMap<String,String>> data){ 
     mSelectedItemsIds = new SparseBooleanArray(); 
     mData = data; 
     this.mContext = context; 
     mInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return mData.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public long getItemId(int arg0) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     ViewHolder vh; 

     if(convertView == null){ 
      vh = new ViewHolder(); 
      convertView = mInflater.inflate(R.layout.projectlist_frame, null); 
      vh.projectTitle = (TextView)convertView.findViewById(R.id.projecttitle); 
      vh.projectSector = (TextView)convertView.findViewById(R.id.projectsector); 
      vh.cb = (CheckBox)convertView.findViewById(R.id.checkBox1); 
      convertView.setTag(vh); 

     } else{ 
      vh = (ViewHolder)convertView.getTag(); 
     } 

     vh.projectTitle.setText(mData.get(position).get("title").toString()); 
     vh.projectSector.setText(mData.get(position).get("sector").toString()); 

     return convertView; 
    } 

    class ViewHolder{ 
     TextView projectTitle, projectSector; 
     CheckBox cb; 
    } 
} 

急需幫助的複選框,現在是產生在檢查的ActionMode。提到很多材料,我意識到需要爲此設置一個自定義適配器。那麼如何實現兩個適配器?還是有其他一些方法?請幫忙!

+0

所以,你需要能夠做一些事情的時候曾經複選框被選中或取消選中? – dumazy

+0

@dumazy是的。 –

回答

1

只需通過使用方法vh.cb.setOnCheckedChangeListener()

添加onCheckChangedListener到您的CheckBox你必須重寫onCheckedChanged方法(CompoundButton buttonView,布爾器isChecked)。

只要把一樣的東西:

@override 
private void onCheckedChanged(CompoundButton buttonView, boolean isChecked){ 
if(isChecked){ 
//box is checked 
}else{ 
//box is unchecked 
} 
+0

我如何設置邏輯項檢查,取消選中,獲得項目計數等? –

+0

在getView中你有正確的位置?所以使用它來從mSelectedItemsIds中獲得正確的值,然後使用vh.cb.setChecked(true)或類似的東西 – dumazy