ListView onItemClickListener не вызывается


Я пытался сделать заказ ListView. ListView содержит RelativeLayout, который содержит TextView и Switch. При нажатии на переключатель переключатель должен измениться с true на false (и наоборот).

Это мой метод getView:

public View getView(int position, View convertView, ViewGroup parent) {
    View vi = convertView;
    if (convertView == null)
        vi = inflater.inflate(R.layout.item_gproblem, null);

    //vi.setClickable(true); Tried this
    //vi.setFocusable(true);

    TextView txt_comment_description = (TextView) vi
            .findViewById(R.id.txt_comment_description);
    txt_comment_description.setText(MyTasks.allGComments.get(position)
            .getProblemDescription());
    //txt_comment_description.setFocusable(false); Tried this
    //txt_comment_description.setClickable(false);

    Switch switch_comment = (Switch) vi.findViewById(R.id.switch_comment);
    //switch_comment.setFocusable(false); Tried this
    //switch_comment.setClickable(false);

    //First time running getMyGComments returns a empty ArrayList
    if (MyTasks.allCustomers.get(ServerData.myID - 1).getMyGComments()
            .size() > position) {
        switch_comment.setChecked(MyTasks.allCustomers
                .get(ServerData.myID - 1).getMyGComments().get(position)
                .isProblemValue());
    }
    return vi;
}

Это мой onClickListener:

list_quality.setOnItemClickListener(new OnItemClickListener() {

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

               //Do Something
            }
        });

Мой onItemClickListener не вызывается, когда я нажимаю на TextView, переключатель или на пространство между двумя объектами. Когда я нажимаю на переключатель, он действует нормально (состояние меняется). Но мой onItemClickListener - нет. называемый. Я попытался отключить clickable и focusable коммутатора и TextView, но это тоже не работает.

Выполняется setOnItemClickListeren.

2 6

2 ответа:

Добавьте нижеприведенную строку в контейнер строки listview:

android:descendantFocusability="blocksDescendants"

Удалить все clickables/focusables независимо от того, где вы поместите их. Затем следует вызвать onItemClick, если вы нажмете на весь элемент.

Кроме того, если вы хотите, чтобы кнопки внутри строки listview также были кликабельными, добавьте onClickListener к кнопке внутри вашего метода getView () адаптера ListView.

Некоторые элементы пользовательского интерфейса могут получить фокус вместо элемента списка, поэтому используйте это, чтобы получить его обратно

android:focusable="false"