2014-12-09 3 views
1

Я следил за множеством учебных пособий в Интернете, но, наконец, я не мог получить то, что я хочу. Наконец, я придумал лучшие предложения и ответы здесь после всех моих исследований.Множественный выбор из списка viewroid android с пользовательским адаптером

У меня есть список с флажком, и мне нужно получить все отмеченные элементы listview.

Это мой макет:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/lineItem" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" > 
    <CheckBox android:id="@+id/chklist" 
     android:layout_alignParentLeft="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
    <TextView 
     android:id="@+id/textView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="2" 
     android:ems="10" 
     android:padding="10dp" 
     android:textColor="#800080" 
     android:textSize="16sp"/> 
    </LinearLayout> 

Я использую пользовательский адаптер, и я получаю проверенные элементы, как показано ниже:

holder.chk.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
       // TODO Auto-generated method stub 
        String listItemText = holder.txtName.getText() 
          .toString(); 
       if (holder.chk.isChecked()) 
        Toast.makeText(getApplicationContext(), 
          "Checked" + " " + listItemText, 
          Toast.LENGTH_SHORT).show(); 
       else 
        Toast.makeText(getApplicationContext(), 
          "Unchecked" + " " + listItemText, 
          Toast.LENGTH_SHORT).show(); 
       } 
       }); 

И как я могу получить все выбранные элементы из списка мой ListView OnItemClick СЛУШАТЕЛЬ:

lv.setOnItemClickListener(new OnItemClickListener() { 
           @Override 
           public void onItemClick(AdapterView<?> parent, 
             View view, int position, long id) { 

    //Here I need to get all the checked items 

    } 
    }); 

Пользовательский адаптер:

public class MyListAdapter extends BaseAdapter { 

    public LayoutInflater inflater; 
    public Activity context; 
    ArrayList<String> arr_calllog_name = new ArrayList<String>(); 
    boolean[] itemChecked; 

    public MyListAdapter(Activity context, 
      ArrayList<String> arr_calllog_name) { 

     super(); 
     this.context = context; 
     this.arr_calllog_name = arr_calllog_name; 
     this.inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     itemChecked = new boolean[arr_calllog_name.size()]; 
    } 

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

    @Override 
    public Object getItem(int position) { 
     return arr_calllog_name.get(position); 
    } 

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

    public class ViewHolder { 
     CheckBox chk; 
     ImageView editimage, delimage; 
     TextView txtName; 
     LinearLayout row; 
    } 

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

     final ViewHolder holder; 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.list, null); 
      holder.chk = (CheckBox) convertView 
        .findViewById(R.id.chklist); 
      holder.txtName = (TextView) convertView 
        .findViewById(R.id.textView); 
      holder.row = (LinearLayout) convertView 
        .findViewById(R.id.lineItem); 
      convertView.setTag(holder); 

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

     holder.txtName.setText(arr_calllog_name.get(position)); 

     holder.row.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       /* 
       * Intent i = new Intent(AddItems.this, AddItems.class); 
       * Bundle bundle = new Bundle(); // Add your data from 
       * getFactualResults method // to bundle String listItemText 
       * = holder.txtName.getText().toString(); 
       * 
       * bundle.putString("Listname", listItemText); 
       * i.putStringArrayListExtra("AddedList", MyList); // Add 
       * the bundle to the intent i.putExtras(bundle); 
       * startActivity(i); 
       */ 

      } 
     }); 

     holder.chk.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
       // TODO Auto-generated method stub 
        String listItemText = holder.txtName.getText() 
          .toString(); 
       if (holder.chk.isChecked()) 
        Toast.makeText(getApplicationContext(), 
          "Checked" + " " + listItemText, 
          Toast.LENGTH_SHORT).show(); 
       else 
        Toast.makeText(getApplicationContext(), 
          "Unchecked" + " " + listItemText, 
          Toast.LENGTH_SHORT).show(); 
       } 
       }); 
     return convertView; 

    } 

} 
+2

@ downvoter- Прокомментируйте, а не downvoting..so, что это поможет мне улучшить мой вопрос. – coder

+0

проверить это ** https: //www.youtube.com/watch? V = 5Sx1d3Mtpw8 ** –

ответ

1

Ваш адаптер содержит все элементы вашего списка. В вашем случае один экземпляр такого элемента должен содержать по крайней мере String (для textView) и Bool (для CheckBox). Всякий раз, когда вам нужен список всех флажков, просто перебирайте элементы списка и создавайте временный список всех элементов, имеющих истинное логическое значение.

List<YourListItemObject> checkedItems = new ArrayList<YourListItemObject>(); 

for (YourListItemObject listItem : adapter.getItems()) { 
    if (listItem.getBool()) { 
    checkedItems.Add(listItem); 
    } 
} 
+0

Я сделал то же самое ... Можете ли вы показать мне, как мне повторить это, и если вы хотите, я опубликую соответствующие части моего адаптер – coder

+0

см. мое редактирование, я добавил пример кода. Возможно, вам нужно отбросить элементы в «YourListItemObject» ... не сделали Java через некоторое время;) – muetzenflo

-1

Попробуйте с этим для множественного выбора ..

 <ListView 
     android:id="@+id/myListView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:choiceMode="multipleChoice" 
     /> 

эта ссылка http://adanware.blogspot.in/2012/04/android-multiple-selection-listview.html

+0

Да. Я согласен, но как мне получить результат? (ie..suppose Если я проверил item 1, item2 и item3 ... Мне нужно получить результат, поскольку вы выбрали эти 3 элемента) – coder

+0

см. эту ссылку http://adanware.blogspot.in/2012/04/ Android-множественный выбор-listview.html –

Смежные вопросы