Android listview onclicklistener не работает с флажком - PullRequest
3 голосов
/ 25 февраля 2012

В моем списке просмотра есть флажок, текстовые просмотры и просмотр изображений.Когда я нажимаю на элемент, onclicklistnere не работает.Я знаю, что это потому, что флажок имеет свой собственный слушатель, и он переопределяет listview onclicklistener.Хорошо.Когда я устанавливаю

android:focusable="false"
android:focusableInTouchMode="false"

в флажке, я могу щелкнуть элемент списка, но флажок также становится оранжевым (как элемент).кто-нибудь знает лучше?

Это класс:

    public class ListViewTutorial2Activity extends Activity {

    SimpleAdapter mSchedule;
    ListView list;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        list = (ListView) findViewById(R.id.SCHEDULE);

        ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("train", "101");
        map.put("from", "6:30 AM");
        map.put("to", "7:40 AM");
        mylist.add(map);
        map = new HashMap<String, String>();
        map.put("train", "103(x)");
        map.put("from", "6:35 AM");
        map.put("to", "7:45 AM");
        mylist.add(map);
         mSchedule = new SimpleAdapter(this, mylist, R.layout.row,
                    new String[] {"train", "from", "to"}, new int[] {R.id.TRAIN_CELL, R.id.FROM_CELL, R.id.TO_CELL});
        list.setAdapter(mSchedule);

        list.setOnItemClickListener(new OnItemClickListener() 
        {
        @Override
        public void onItemClick(AdapterView<?> a, View v, int position, long id) {
             Object o = list.getItemAtPosition(position);
            }
        });
    }
}

и row.xml:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:paddingTop="4dip"
     android:paddingBottom="6dip"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal">
    <CheckBox
        android:id="@+id/check"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:descendantFocusability="beforeDescendants">
    </CheckBox>
     <TextView android:id="@+id/TRAIN_CELL"
         android:layout_width="50dip"
         android:layout_height="wrap_content"/>

     <TextView android:id="@+id/FROM_CELL"
         android:layout_width="70dip"
         android:layout_height="wrap_content" android:layout_weight="1"/>

     <TextView android:id="@+id/TO_CELL"
         android:layout_width="60dip"
         android:layout_height="wrap_content"  android:layout_weight="1"/>

            <ImageView
        android:id="@+id/icon"
        android:layout_width="22px"
        android:layout_height="22px"
        android:layout_marginLeft="4px"
        android:layout_marginRight="10px"
        android:layout_marginTop="4px"
        android:src="@drawable/icon" >
    </ImageView>
</LinearLayout>

Ответы [ 5 ]

7 голосов
/ 11 июля 2012

Вы пытались добавить это к своему CheckBox в макете xml?

android:focusable="false"
android:focusableInTouchMode="false"

Это сработало для меня и может быть лучшим решением, чем то, через что вам пришлось пройти.

1 голос
/ 23 сентября 2014
android:focusable="false"

Это решит проблему в этом контексте

1 голос
/ 25 февраля 2012

Для этого вам не нужно устанавливать какие-либо специальные свойства в CheckBox. Однако в ListView попробуйте следующее:

android:clickable="true"
android:descendantFocusability="beforeDescendants"

Если это не сработает, возможно, вы делаете что-то не так в другом месте.

0 голосов
/ 08 августа 2016

У меня была такая же проблема, даже когда я добавил это к флажку

android:clickable="false"
android:focusableInTouchMode="false"
android:focusable="false

Тогда я понял, что моя проблема в том, что у меня есть onStateChangedListener для флажка

0 голосов
/ 18 мая 2016

Я сталкиваюсь с этой проблемой в RecyclerView, возможно, этот ответ кому-нибудь пригодится. Все эти ответы не помогли мне. Может быть, это решение не оптимально, но вот оно:

<FrameLayout
            android:id="@+id/like"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/views_holder"
            android:layout_toEndOf="@+id/btn_comment"
            android:clickable="true">

            <CheckBox
                android:id="@+id/cb_like"
                android:layout_width="wrap_content"
                android:layout_height="@dimen/pressable_size"
                android:gravity="center_vertical"
                android:button="@drawable/ic_heart_checkbox"
                android:paddingStart="8dp"
                android:paddingEnd="8dp"
                android:clickable="false"
                android:focusable="false"
                android:focusableInTouchMode="false"
                tools:text="324"
                />

        </FrameLayout>

Я добавил оболочку ViewGroup (в данном случае - FrameLayout) и установил прослушиватель кликов в FrameLayout: (В моем случае с ButterKnife):

@OnClick(R.id.like)
void onLikeClicked() {
        cbLike.setChecked(!cbLike.isChecked());
        if (onNewsClickListener != null) {
            onNewsClickListener.onLikeClicked(getAdapterPosition());
        }
    }

R.id.like - FrameLayout, cbLike (CheckBox). Работает правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...