Нажатие на Listitem не работает с флажками Android

РЕДАКТИРОВАТЬ (РЕШЕНО). Для ответа перейдите в конец вопроса.

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

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    fl=(ListView)findViewById(R.id.MainMenu);//Mainmenu is listview
    fl.setAdapter(new CustomAdapter(Annotate.this,R.layout.preann2,_dir));//preann2 is row and _dir is the list of objects
    //fl.setOnItemClickListener(this); tried this too
}

public void onItemClick(AdapterView<?> a, View view, int pos, long id) 
{
      //Implementations
}

    public class CustomAdapter extends ArrayAdapter<String>
{
    public CustomAdapter(Context context, int textViewResourceId,String[] objects) {
        super(context, textViewResourceId,objects);
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater=getLayoutInflater();
            View row=inflater.inflate(R.layout.preann2, parent, false);
            try
            {

            TextView Name=(TextView)row.findViewById(R.id.title);
            Name.setText("xyz");
            ImageView icon=(ImageView)row.findViewById(R.id.icon);
            row.setFocusable(true);
            row.setClickable(true);
            row.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    checkState[position]=!checkState[position];
                }

            });
            CheckBox c=(CheckBox)row.findViewById(R.id.checkBox);
            c.setChecked(checkState[position]);
            c.setOnCheckedChangeListener(new OnCheckedChangeListener(){

                @Override
                public void onCheckedChanged(CompoundButton v,
                        boolean isChecked) {
                    // TODO Auto-generated method stub
                    CheckBox checkBox=(CheckBox)v;
                    if (isChecked) {
                        checkState[position]=true;
                     }
                    else
                        checkState[position]=false;
                }
            });
            /*  tried this too
                                  c.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View v) {
                    CheckBox checkBox=(CheckBox)v;
                    if (checkBox.isChecked()) {
                        //checkBox.setChecked(false);
                        checkState[position]=true;
                     }
                    else
                        checkState[position]=false;
                }});*/
            icon.setImageResource(R.drawable.ic_launcher);
            }catch(Throwable err)
            {
                err.printStackTrace();
            }
            return row;
        }
}

Я хочу, чтобы элементы списка были интерактивными, если пользователь хочет щелкнуть только один элемент.

РЕДАКТИРОВАТЬ (по просьбе Ахиля) - preann2.xml в папке макетов:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"
  android:padding="4dip"
  >

 <ImageView android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_marginRight="4dip"/>


  <TextView
  android:id="@+id/title"
  android:layout_width="fill_parent"
  android:layout_height="match_parent"
  android:layout_weight="1"
  android:ellipsize="end"
  android:gravity="center_vertical"
  android:singleLine="true"
  android:textStyle="bold" />

<CheckBox
  android:id="@+id/checkBox"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" />

</LinearLayout>

main.xml в папке макетов:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >


<ListView
    android:id="@+id/MainMenu"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

</ListView>

</LinearLayout>

РЕДАКТИРОВАТЬ (РЕШЕНО) Просто добавьте эти свойства в флажок:

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

person silentkratos    schedule 07.04.2013    source источник
comment
Если вы хотите, чтобы флажок проверялся при щелчке по строке, укажите условия с onClickListener() для самой строки.   -  person Karthik Balakrishnan    schedule 07.04.2013
comment
Я хочу, чтобы при щелчке по элементам в списке выполнялись другие действия. Я могу установить флажки напрямую, щелкнув по ним, так что проблемы с этим. Я действительно хочу вызвать действие, когда я нажимаю на элемент.   -  person silentkratos    schedule 07.04.2013
comment
Попробуйте добавить log внутри onClickListener для флажка и сообщите нам, зарегистрирован ли журнал.   -  person Karthik Balakrishnan    schedule 07.04.2013
comment
Я решил это. Просто нужно было установить для свойств focusable и focusonTouchMode значение false. В любом случае спасибо.   -  person silentkratos    schedule 07.04.2013
comment
Пожалуйста, ответьте на свой вопрос и примите его через 2 дня. Позже может помочь кому-нибудь другому.   -  person Karthik Balakrishnan    schedule 07.04.2013
comment
Я действительно пытался. Но поскольку я новичок, сайт мне тоже не позволяет. Придется подождать, пока я получу достаточно репо.   -  person silentkratos    schedule 07.04.2013
comment
Просто отредактируйте свой вопрос, указав в нем решение.   -  person Karthik Balakrishnan    schedule 07.04.2013
comment
возможный дубликат ListView OnItemClickListener Not Responding?   -  person Heath Borders    schedule 12.04.2014
comment
возможный дубликат элемента списка с флажком неактивен   -  person avalancha    schedule 14.09.2015


Ответы (3)


Решение, упомянутое в вопросе, решает проблему:

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

AbsListView проверяет View#hasFocusable и не разрешает нажатия на элемент, если это так. Таким образом, отключите фокус на всех объектах, на которые обычно можно сфокусироваться.

person Heath Borders    schedule 12.04.2014

Используйте эту строку в rootView элемента списка
android: DescendantFocusability = "blocksDescendants"

person Suresh kumar    schedule 28.05.2014

Я неправильно понял вашу проблему. пожалуйста поищите здесь свою проблему. Надеюсь, она решит вашу проблему.

person Akhil    schedule 07.04.2013
comment
Я сделал то же самое. Просмотр текста, значок и флажок в одном макете. Список главного меню находится в другом макете. - person silentkratos; 07.04.2013
comment
Да, я понял ... но то, что я говорю в вашем макете ListItem, сохраните TextView и значок в одном макете и установите слушателя в этом макете так же, как вы это сделали для Checkbox - person Akhil; 07.04.2013
comment
Я поделился макетами в качестве редактирования. не могли бы вы показать мне, как ..? пожалуйста? - person silentkratos; 07.04.2013
comment
Я решил это. Просто нужно было установить для свойств focusable и focusonTouchMode значение false. В любом случае спасибо. - person silentkratos; 07.04.2013