Выбор флажка и элемент списка щелкните по тому же списку в Android

Я реализовал настраиваемый список с флажками в режиме единого выбора списка Android. Мне нужна такая функциональность, чтобы при нажатии на флажок должна быть добавлена ​​​​строка, соответствующая этому флажку (или, скорее, скажем, показанный объект «Человек» в этой строке следует добавить в другой список и удалить из этого списка), а при щелчке элемента по этому списку я должен перейти на другой экран в Android. Я пробовал другие способы, но они указывают, что флажок должен быть focasable: false. Также Я хочу, чтобы прослушиватель кликов работал только с флажком. Любые предложения или помощь по этим вопросам. Заранее спасибо

Это идентификатор xml-кода.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <CheckBox
        android:id="@+id/projects_check"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginBottom="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginStart="5dp"
        android:layout_marginTop="5dp"
        android:focusable="false" />

    <TextView
        android:id="@+id/project_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/projects_check"
        android:layout_alignBottom="@+id/projects_check"
        android:layout_marginLeft="10dp"
        android:layout_marginStart="10dp"
        android:layout_toEndOf="@+id/projects_check"
        android:layout_toRightOf="@+id/projects_check"
        android:text="TextView" />

</RelativeLayout>

И это мой код прослушивания кликов onitem..

@Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long arg3) {
        Projects info = (Projects) parent.getItemAtPosition(position);
        info.toggleChecked();
        ProjectsHolder viewHolder = (ProjectsHolder) view.getTag();
        viewHolder.getmChoiceSelect().setChecked(info.isChecked());
        if (viewHolder.getmChoiceSelect().isChecked()) {
            completed_projects.add(info);
            mCompProjAdapter.notifyDataSetChanged();
            projects_list.remove(info);
            mProjAdapter.notifyDataSetChanged();
        }
    }

person AndroidMech    schedule 09.09.2014    source источник
comment
предложение использовать пользовательский адаптер и обрабатывать событие щелчка флажка и текстового просмотра вместо setOnItemClickListener для просмотра списка   -  person Yograj Shinde    schedule 09.09.2014
comment
Но как я могу получить щелчок флажка во фрагменте, поскольку флажок реализован в пользовательском адаптере   -  person AndroidMech    schedule 09.09.2014
comment
вам нужно написать событие щелчка флажка и текстовое поле в вашем пользовательском адаптере.   -  person Yograj Shinde    schedule 09.09.2014


Ответы (1)


Чтобы управлять нажатием на саму строку, вы можете просто написать слушатель для самого listView. Вот как я управляю щелчком флажка.

 class CustomAdapter extends ArrayAdapter<BeanClass> {

            private ArrayList<BeanClass> items;

            public FieldPlannedAdapter(Context context,
                    ArrayList<BeanClass> items) {
                super(context, R.layout.custom_list_row, items);

                this.items = items;
            }

            public class ViewHolder {

                protected CheckBox checkbox;
                protected TextView name;

            }

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

                final ViewHolder viewHolder;

                if (convertView == null) {

                    LayoutInflater inflater = (LayoutInflater) getActivity()
                            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    convertView = inflater.inflate(R.layout.custom_list_row,
                            null);
                    viewHolder = new ViewHolder();
                    viewHolder.checkbox = (CheckBox) convertView
                            .findViewById(R.id.checkIsMissed);

                    viewHolder.name = (TextView) convertView
                            .findViewById(R.id.txtViewMTPname);


                    convertView.setTag(viewHolder);


                    viewHolder.checkbox
                            .setOnClickListener(new View.OnClickListener() {
                                public void onClick(View v) {
                                    final CheckBox cb = (CheckBox) v;
                                    final BeanClass item = (BeanClass) cb
                                            .getTag();

                                    item.setSelected(cb.isChecked());


                                    if (cb.isChecked()) {
                                        // DO SOMETHING

                                    } else {

                                    }



                                }
                            });


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

                BeanClass item = items.get(position);
                viewHolder.name.setTag(item);

                viewHolder.checkbox.setTag(item);


                viewHolder.name.setText(item.getName());

                viewHolder.checkbox.setChecked(item.isSelected());

                if (viewHolder.checkbox.isChecked()) {
                    // DO SOMETHING

                } else {
                    // DO SOMETHING
                }

                return convertView;
            }
        }

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

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp" >

    <LinearLayout
        android:id="@+id/row"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/card_ui"
        android:descendantFocusability="blocksDescendants"
        android:orientation="vertical"
        android:paddingBottom="10dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:paddingTop="10dp" >

        <TextView
            android:id="@+id/txtViewMTPname"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Customer Name"
            android:textColor="@drawable/text_selector"
            android:textSize="14sp"
            android:textStyle="bold" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/txtViewMtpDarCity"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="2"
                android:text="dgdgdgdg"
                android:textColor="@drawable/text_selector"
                android:textSize="16sp"
                android:textStyle="italic" />

            <CheckBox
                android:id="@+id/checkIsMissed"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="5dp"
                android:gravity="center"
                android:text="Missed" />


        </LinearLayout>
    </LinearLayout>

</FrameLayout>
person Dhaval    schedule 09.09.2014
comment
Я пытался сделать это, но после выполнения вашей процедуры флажок по-прежнему остается частью строки списка, поэтому я не могу реализовать прослушиватель кликов onitem. - person AndroidMech; 09.09.2014
comment
Слушатель onItemClick должен быть реализован в списке, в onCreate - person Dhaval; 09.09.2014
comment
Да, я сделал это в своем классе фрагментов, который содержит список, но поскольку строка списка является пользовательской, флажок появляется на переднем плане, и я не могу щелкнуть что-либо, кроме флажка. Не могли бы вы также добавить код щелчка по элементу .Просто краткое объяснение было бы хорошо, например: показать тост при нажатии на элемент. Заранее спасибо - person AndroidMech; 09.09.2014
comment
Я спросил вас об этом, потому что я реализовал этот прослушиватель щелчков onitem, но все еще не мог получить щелчок - person AndroidMech; 09.09.2014
comment
Я добавлю пример строки. Попробуйте настроить свой макет в соответствии с этим, - person Dhaval; 09.09.2014
comment
Дело в том, что вам на самом деле нужно добавить в макет атрибут потомокфокуса, который должен заботиться о щелчке по строке. - person Dhaval; 09.09.2014
comment
В вашем макете не хватает некоторых вещей. Проверьте мой и обновите соответственно - person Dhaval; 09.09.2014