2011-12-26 83 views
0

自定義列表視圖中的每個項目相關聯的複選框我有自定義列表與它的名字像下面顯示的圖片如何爲延伸BaseAdapter

public class LazyAdapter extends BaseAdapter { 

private Activity activity; 
private String[] data; 
private static LayoutInflater inflater=null; 
public ImageLoader imageLoader; 

public LazyAdapter(Activity a, String[] d) { 
    activity = a; 
    data=d; 
    inflater = 
    (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    imageLoader=new ImageLoader(activity.getApplicationContext()); 
} 

public int getCount() { 
    return data.length; 
} 

public Object getItem(int position) { 
    return position; 
} 

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

public static class ViewHolder{ 
    public TextView text; 
    public ImageView image,yesimage; 

} 

public View getView(int position, View convertView, ViewGroup parent) { 
    View vi=convertView; 
    ViewHolder holder; 
    if(convertView==null){ 
     vi = inflater.inflate(R.layout.item, null); 
     holder=new ViewHolder(); 
     holder.text=(TextView)vi.findViewById(R.id.text);; 
     holder.image=(ImageView)vi.findViewById(R.id.image); 
     holder.yesimage=(ImageView)vi.findViewById(R.id.selectedyes); 
     vi.setTag(holder); 
    } 
    else 
     holder=(ViewHolder)vi.getTag(); 



    holder.text.setText("item "+position); 
    holder.image.setTag(data[position]); 
    holder.yesimage.setTag(data[position]); 

    imageLoader.DisplayImage(data[position], activity, holder.image,holder.yesimage); 
    return vi; 
} 
} 

這個名單我想設置,

 list=(ListView)findViewById(R.id.list); 
     adapter=new LazyAdapter(this, mStrings);//mstrings is array 
     list.setAdapter(adapter); 
     list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 

在那裏爲我能夠用得到所有選中的列表項,

 list.setOnItemClickListener(new OnItemClickListener(){ 

     TextView selected=(TextView)findViewById(R.id.selected); 
     final ArrayList<String> years = new ArrayList<String>(); 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 

      SparseBooleanArray checked = list.getCheckedItemPositions(); 
        if(checked.get(arg2)) 
        { 
         years.add(""+mStrings[arg2]+"\n"); 
        } 
        else 
        { 
        years.remove(" "+mStrings[arg2]+"\n"); 
        } 

      if(years.size()!=0) 
       selected.setText(years.toString()); 
      else 
      selected.setText("You Have Nothing in Cart"); 
      }}); 

,但沒有指示列表所選擇的項目進行檢查,它只是認爲作爲選擇,在這裏我無法用點擊項目,

list.setAdapter(new ArrayAdapter<String>(this, 
android.R.layout.simple_list_item_multiple_choice, mStrings)); 
list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 

因爲我的名單擴展BaseAdapter,

我想提出的複選框,每行的清單,確保該項目被檢查一次,我檢查列表項目,我該怎麼做......?

回答

2

取出ViewHolder中的複選框併爲每個複選框執行setOnCheckedChangeListener

例如:在複選框

holder.checkbox = (CheckBox) vi.findViewById(R.id.checkbox); 
holder.checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() 
{ 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
    { 
     if (isChecked) 
     { 
      // perform logic 
     } 

    } 
}); 
+0

謝謝帕雷什,它絕對是我想要的... – user1065490 2011-12-26 12:09:58

+0

@ user1065490很高興我的回答很有幫助。 – 2011-12-26 12:53:20

+0

如何在列表中顯示某些圖像時,我選擇列表中的一個項目.. if(convertView.isSelected()) \t holder.yesimage.setVisibility(View.VISIBLE);其他 \t holder.yesimage.setVisibility(View.GONE); 我試圖在getView()方法中的代碼,但圖像只有一次,當我第一次點擊任何項目時可見..即使我檢查單個項目,圖像也變得可見所有項目的項目... – user1065490 2011-12-26 13:09:48

0

集setOnCheckedChangeListener並檢查相同的狀態。 根據代碼我認爲不會有任何你將面臨的重大問題。你想在點擊chackBox時做一些特定的功能嗎?如果是的話,請分享一下。

+0

是的,當我檢查複選框時,相關的項目應該顯示在稱爲購物車的文本視圖上,隨着用戶進行檢查項目而繼續更新,或者如果用戶取消選中所有項目或未選擇任何項目,則顯示靜態文本「您的購物車「... – user1065490 2011-12-26 12:22:22

+0

當用戶選擇它時,您可以使用HashMap來存儲選定的項目,並在它取消該項目時移除該項目。您可以檢查購物車上顯示的HashMap的大小。 – 2011-12-26 13:37:08