Подтвердить что ты не робот

Android ListView с флажком и всеми интерактивными

Возможный дубликат:
Android: привязка данных из базы данных к CheckBox в ListView?

Я хочу использовать ListView с элементами, имеющими следующий макет

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

CB - это флажок, а ТВ - текстовое окно.

Теперь я где-то читал, что вы не можете использовать элементы с кликабе в ListView. Если у вас есть, то вы не сможете нажать на ListItems. Но если я посмотрю приложение GoogleMail, это возможно. Я могу отметить несколько сообщений с помощью флажка (и затем выбрать действие для них), или я могу нажать на ListItem (или прокрутить с помощью dpad), чтобы перейти на другой экран. Кто-нибудь имеет код/​​пример, как это возможно?

4b9b3361

Ответ 1

Задайте CheckBox как focusable="false" в вашем XML-макете. В противном случае он украдет события щелчка из списка.

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

Ответ 2

Установите для адаптера listview значение "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);    

Ответ 3

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());


                }
        });

Ответ 4

этот код работает на моем 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>

Ответ 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;



        }
}

Надеюсь, что это поможет.