无法在4.1中的popup窗口列表视图中select行,但在Android 5.0中工作

我在我的页面有一个列表视图popup。 我创build了一个单独的XML的popup式devise,并加载在我的主页点击一些button。 popup窗口有一个列表视图,每行都有一个图像和一个文本视图。 我无法在android 4.1的listview中获得行select,但它在5.0中工作。 任何人都可以请build议我的解决scheme? 列表显示:

<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) { } 

Solutions Collecting From Web of "无法在4.1中的popup窗口列表视图中select行,但在Android 5.0中工作"

尝试所有的解决scheme:


 popupwindow.setFocusale(true); listView xml : "android:focusable="true" 

不要使用lstSiteMenu.setOnItemClickListener
而是去你的适配器getView和添加

 convertView.setOnClickListener 

希望它会帮助你!

从listview中删除这个属性, android:descendantFocusability="blocksDescendants"

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

从文本和imageview。

并尝试这是示例示例,

 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(); 

否则你的代码是好的。 有用。

通过这个链接了解更多细节。

另一个官方链接相同。

您需要从ListView删除android:descendantFocusability="blocksDescendants"

还要在ImageViewTextView行布局中删除android:focusable="false"android:focusableInTouchMode="false"

列表项应该是可点击的,禁用它可以获得焦点

在适配器类中设置行onclick监听器

 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"