2011-03-24 114 views
53

可能重複:
Android: Binding data from a database to a CheckBox in a ListView?的Android的ListView與複選框,所有可點擊

我想用一個ListView具有以下佈局的項目

------------------------- 
[CB] TV   TV 
------------------------- 

CB是複選框和電視是Textview。

現在我已經讀了一個地方,你不能在ListView中有可點擊的項目。如果你有一些,那麼你將無法點擊ListItems。 但是,如果我看看GoogleMail應用程序,這是可能的。我可以用複選框標記幾條消息(然後爲它們選擇一個動作),或者我可以點擊ListItem(或使用dpad滾動)到另一個屏幕。 有人有代碼/例如這可能嗎?

+0

我沒有代碼,但ATM是可能的,因爲移動,拖動,單擊和longClick不是同一個事件。此外,複選框的hitbox位於列表視圖的頂部。 – Fredrik 2011-03-24 09:58:21

+0

看看代碼[這裏](http://stackoverflow.com/questions/1505751/android-binding-data-from-a-database-to-a-checkbox-in-a-listview)你可以選擇多個項目在listview中。檢查[這裏](http://appfulcrum.com/?p=281)與文本和圖像的例子:[這裏](http://appfulcrum.com/?p=311) – 2011-03-24 09:58:50

+3

這個問題是不是重複。另一個問題是關於如何讓CursorAdapter將正確的db列綁定到特定的視圖。這個問題不是關於綁定數據,而是關於如何在ListView中使複選框可點擊。 – 2013-09-08 10:54:00

回答

5

下面的代碼將幫助您:

public class DeckListAdapter extends BaseAdapter{ 

     private LayoutInflater mInflater; 
     ArrayList<String> teams=new ArrayList<String>(); 
     ArrayList<Integer> teamcolor=new ArrayList<Integer>(); 


     public DeckListAdapter(Context context) { 
      // Cache the LayoutInflate to avoid asking for a new one each time. 
      mInflater = LayoutInflater.from(context); 

      teams.add("Upload"); 
      teams.add("Download"); 
      teams.add("Device Browser"); 
      teams.add("FTP Browser"); 
      teams.add("Options"); 

      teamcolor.add(Color.WHITE); 
      teamcolor.add(Color.LTGRAY); 
      teamcolor.add(Color.WHITE); 
      teamcolor.add(Color.LTGRAY); 
      teamcolor.add(Color.WHITE); 


     } 



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


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


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

     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 
      final ViewHolder holder; 


      if (convertView == null) { 
       convertView = mInflater.inflate(R.layout.decklist, null); 

       holder = new ViewHolder(); 
       holder.icon = (ImageView) convertView.findViewById(R.id.deckarrow); 
       holder.text = (TextView) convertView.findViewById(R.id.textname); 

      .......here you can use holder.text.setonclicklistner(new View.onclick. 

         for each textview 


       System.out.println(holder.text.getText().toString()); 

       convertView.setTag(holder); 
      } else { 

       holder = (ViewHolder) convertView.getTag(); 
      } 



      holder.text.setText(teams.get(position)); 

      if(position<teamcolor.size()) 
      holder.text.setBackgroundColor(teamcolor.get(position)); 

      holder.icon.setImageResource(R.drawable.arraocha); 







      return convertView; 
     } 

     class ViewHolder { 
      ImageView icon; 
      TextView text; 



     } 
} 

希望這有助於。

19

設置列表視圖適配器 「simple_list_item_multiple_choice」

ArrayAdapter<String> adapter; 

List<String> values; // put values in this 

//Put in listview 
adapter = new ArrayAdapter<UserProfile>(
this, 
android.R.layout.simple_list_item_multiple_choice, 
values); 
setListAdapter(adapter);  
+1

只有當您想要一個簡單的佈局時,那些內置在佈局中的內容纔有用。他表示他希望做一個帶有2個文本視圖的複選框。 – 2014-07-24 13:31:53

101

在你的XML佈局設置CheckBoxfocusable="false"。否則,它會從列表視圖中竊取點擊事件。

當然,如果你這樣做,你需要手動處理這標誌着CheckBox爲選中/取消,如果列表項被點擊,而不是CheckBox,但你可能想的是反正。

+1

謝謝,這對我有效;) – Johannes 2012-07-31 08:04:48

+29

設置focusable =「false」複選框允許我點擊listview項目,但它不會阻止我點擊複選框本身。爲此,我還需要爲該複選框設置clickable =「false」。 – basilisk 2012-11-28 17:41:28

+0

如何讓點擊項目點擊checkbox上的點擊列表視圖android? – 2014-03-07 06:06:31

9
holder.checkbox.setTag(row_id); 

holder.checkbox.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        CheckBox c = (CheckBox) v; 

        int row_id = (Integer) v.getTag(); 

        checkboxes.put(row_id, c.isChecked()); 


       } 
     }); 
7

此代碼的工作對我proyect,我可以選擇列表視圖項和複選框

<?xml version="1.0" encoding="utf-8"?> 
<!-- Single List Item Design --> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:clickable="true" > 

    <TextView 
     android:id="@+id/label" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="4" /> 

    <CheckBox 
     android:id="@+id/check" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:focusable="false" 
     android:text="" > 
    </CheckBox> 

</LinearLayout> 
+0

@Rob對不起。 – Borja 2012-11-11 15:24:57