gpt4 book ai didi

PopupWindow onitemclick 中的 Android Listview 在某些设备上不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:47:29 26 4
gpt4 key购买 nike

我的 ListView 在 PopupWindow 里面。

当我在设备 ASUS K00z fonepad 中显示 PopupWindow 并单击 Listview 行时效果很好。

但在 HTC Z715e 中不工作(onitem click 事件未触发)

1.这是我的 ListView 项目布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ln_testpopitemcon"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="52dp"
android:background="#3b8ed4"
android:descendantFocusability="blocksDescendants">

<ImageView
android:id="@+id/img_testiconmenu"
android:layout_margin="10dp"
android:layout_width="32dp"
android:layout_height="32dp"
android:src="@drawable/radio_selected"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"/>

<TextView
android:id="@+id/tv_testtitlemenu"
android:gravity="left|center_vertical"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"/>

</LinearLayout>

2.这是我的弹窗布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ln_testpopocontainer"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<ListView
android:paddingLeft="2dp"
android:paddingRight="2dp"
android:paddingBottom="2dp"
android:id="@+id/lv_testpop"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:dividerHeight="2dp"
android:background="#00000000"
android:orientation="vertical"/>

</LinearLayout>

3.这是我的适配器

public class testmenuadapter extends BaseAdapter{
private Context context;
private ArrayList<MenuInfo> MenuList;
private LayoutInflater Layf;

public testmenuadapter(Context context, ArrayList<MenuInfo> menuList){
this.context = context;
this.MenuList = menuList;
this.Layf = LayoutInflater.from(context);
}

@Override
public int getCount() {
return MenuList.size();
}

@Override
public Object getItem(int position) {
return MenuList.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = Layf.inflate(R.layout.testpopoitem, null);

holder.img_testiconmenu = (ImageView)convertView.findViewById(R.id.img_testiconmenu);
holder.tv_testtitlemenu = (TextView)convertView.findViewById(R.id.tv_testtitlemenu);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder)convertView.getTag();
}

MenuInfo info = MenuList.get(position);

if(info != null) {
if (holder.tv_testtitlemenu != null) {
holder.tv_testtitlemenu.setText(info.getTitle());
}
}

return convertView;
}

public class ViewHolder
{
ImageView img_testiconmenu;
TextView tv_testtitlemenu;
}
}

4.这是我用来创建和显示弹出窗口的代码

final View actionview = inflater.inflate(R.layout.testpopo, (ViewGroup)getActivity().findViewById(R.id.ln_testpopocontainer));
this.testpopup = new PopupWindow(actionview, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
this.testpopup.setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
this.testpopup.setOutsideTouchable(false);
this.testpopup.setAnimationStyle(R.style.Animation);

this.testpopuplistview = (ListView)this.testpopup.getContentView().findViewById(R.id.lv_testpop);

this.testmenupopup = new ArrayList<MenuInfo>();
this.testmenupopup.add(new MenuInfo("aaa", "AAA", 0, 0, false));
this.testmenupopup.add(new MenuInfo("bbb", "BBB", 0, 0, false));
this.testmenupopup.add(new MenuInfo("ccc", "CCC", 0, 0, false));

this.testpopadapter = new testmenuadapter(getActivity(), this.testmenupopup);

this.testpopuplistview.setAdapter(this.testpopadapter);
this.testpopuplistview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
Toast.makeText(getActivity(), ((MenuInfo)adapterView.getItemAtPosition(position)).getTitle(), Toast.LENGTH_LONG).show();
}
});

Button btnshowpop = (Button)findViewById(R.id.btn_showpop);
btnshowpop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
testpopup.showAtLocation(rootView, Gravity.CENTER, 0, 0);
}
});

如何解决

编辑我可以解决我的问题。

替换

this.testpopup = new PopupWindow(actionview, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

this.testpopup = new PopupWindow(actionview, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);

抱歉浪费时间,我很愚蠢。

最佳答案

您可以制作上下文菜单而不是弹出菜单,它的工作方式与此相同。要创建上下文菜单,请引用此链接:

http://developer.android.com/guide/topics/ui/menus.html#context-menu

在此链接中,请参阅创建上下文菜单

像这样对示例进行排序,您可以添加上下文菜单 ------首先在 onclicklistener 中注册它,例如

注册上下文菜单( View )

for oncreate  
@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo)
{
menu.add(Menu.NONE, CONTEXT_MENU_UNPAIR_ITEM, Menu.NONE, "UNPAIR");
menu.add(Menu.NONE, DEFAULT_DEVICE, Menu.NONE, "USE AS CGM DEVICE");
}

For item selected in context menu
@Override
public boolean onContextItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case CONTEXT_MENU_UNPAIR_ITEM:
//whatever u want
break
case DEFAULT_DEVICE:
//whatever your logic accordind to u
return(true);
}
return(super.onOptionsItemSelected(item));
}

关于PopupWindow onitemclick 中的 Android Listview 在某些设备上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25696597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com