не удалось выбрать строку в списке в всплывающем окне 4.1, но работает в android 5.0
У меня есть всплывающее окно на моей странице с списком. Я создал дизайн всплывающего окна в отдельном xml и загрузил его на какой-либо кнопке мыши на моей главной странице. Всплывающее окно имеет список с каждой строкой, имеющей изображение и текстовое представление. Я не могу получить выбор строки в списке в android 4.1, но он работает в 5.0. Может ли кто-нибудь предложить мне решение? Посмотреть список:
<ListView android:id="@+id/lstSites"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fastScrollEnabled="true"
android:layout_margin="5dp"
android:descendantFocusability="blocksDescendants"></ListView>
</LinearLayout>
Элемент списка:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants"
android:focusable="false"
android:focusableInTouchMode="false">
<ImageView
android:id="@+id/thumbImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:focusable="false"
android:focusableInTouchMode="false"/>
<TextView
android:id="@+id/tvSite"
android:textSize="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="Name"
android:focusable="false"
android:focusableInTouchMode="false"/>
добавление перечислителя строк:
lstSiteMenu = (ListView) popupView.findViewById(R.id.lstSites);
adapter = new MenuItemsAdapter(SiteActivity.this, arrMenu);
// Attach the adapter to a ListView
lstSiteMenu.setAdapter(adapter);
lstSiteMenu.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
final int position, long id) {
}
Ответы
Ответ 1
удалить это свойство из списка, android:descendantFocusability="blocksDescendants"
и
android:focusable="false"
android:focusableInTouchMode="false"
из текста и изображения.
И попробуйте Это примерный пример,
String names[] ={"A","B","C","D"};
AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
LayoutInflater inflater = getLayoutInflater();
View convertView = (View) inflater.inflate(R.layout.row_file, null);
alertDialog.setView(convertView);
alertDialog.setTitle("List");
ListView lv = (ListView) convertView.findViewById(R.id.listView);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,names);
lv.setAdapter(adapter);
alertDialog.show();
в противном случае ваш код в порядке. оно работает.
перейдите по этой ссылке для получения более подробной информации.
Другая официальная ссылка для нее.
Ответ 2
Попробуйте все решения:
popupwindow.setFocusale(true);
listView xml : "android:focusable="true"
не используйте lstSiteMenu.setOnItemClickListener
вместо этого перейдите в свои адаптеры getView
и добавьте
convertView.setOnClickListener
Надеюсь, это поможет вам!
Ответ 3
Вам нужно удалить android:descendantFocusability="blocksDescendants"
из вашего ListView
.
Также удалите android:focusable="false"
и android:focusableInTouchMode="false"
из макета строки в ImageView
и TextView
.
Элемент списка должен быть кликабельным, его можно отключить
Ответ 4
Установить строку onclick listener в классе адаптера
public class MenuItemsAdapter extends Base Adapter{
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
/*
Paste your adapter code
*/
customView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.v("log", "You clicked at pos "+position);
}
});
}
}
Этот код работал во всех версиях sdk.
Также удалите эти свойства из xml файлов
android:descendantFocusability="blocksDescendants"
android:focusable="false"
android:focusableInTouchMode="false"