Intereting Posts
Как передать идентификатор электронной почты, который будет синхронизирован, чтобы создать календарь событий в android? Android.os.NetworkOnMainThreadException в службе в отдельном процессе NullPointerException с android.support.v7.widget.Toolbar Закройте поиск, если позиция табуляции изменится или вызовите onPageChangeListener Клиентский запрос Azure Mobile Service не возвращает управление клиентскому приложению Xamarin Form android Android ViewPropertyAnimator не масштабируется одновременно Как проверить, присутствует ли вновь созданная папка на SD-карте в Android Передача пучка в действие, заданное как синглетная маска Не удалось обработать ошибку android.intent.package_ADDED и REMOVED при извлечении местоположения с помощью API Fused Location Импортировать новый отказ модуля Android для модуля JellyRefreshLayout Почему я не могу переопределить onConfigurationChanged? Учетная запись не отображается в настройках контактов приложения на устройстве от HTC Создайте боковую панель, например браузер Dolphin или Firefox в Android Текст макета раздвижной вкладки в верхнем регистре Как установить размер холста?

Щелчок по списку не работает с флажками Android

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

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

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; } } 

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

EDIT (по просьбе Akhil) – 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> 

EDIT (SOLVED) Просто добавьте эти свойства к флажку:

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

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

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

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

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

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