我的ListView里面PopupWindow。
My ListView is inside PopupWindow.
在显示PopupWindow和设备华硕K00z点击列表视图行fonepad借机很好的我。
When i shown PopupWindow and click on Listview row in device ASUS K00z fonepad worke very well.
但在HTC Z715E不工作(onitem Click事件不会触发)
But in HTC Z715e is not working (onitem click event not fired)
1,本是我的列表视图项的布局
1.This is my listview item layout
<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,本是我的弹出式布局
2.This is my popup layout
<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,本是我的适配器
3.This is my adapter
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,本是codeI用于创建和显示弹出
4.This is code i use to create and show popup
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);
}
});
如何解决它的
How to solve it's
修改 我可以解决我的问题。
EDIT i can solve my problem.
替换
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);
抱歉浪费时间,我很愚蠢的。
sorry for waste time i'm very stupid.
您可以右键菜单,而不是弹出菜单它的工作同样如此。 有关创建上下文菜单只是参考此链接:
You can make context menu instead of popup menu it work same like this . For creating context menu just refer this link:
http://developer.android.com/guide/主题/ UI / menus.html#上下文菜单
在此超连结,参照创建上下文菜单
。
在此这样ü可以添加右键菜单排序exanple ------ 先注册它onclicklistener像
Sort exanple on this like this u can add context menu ------ first register it in onclicklistener like
registerForContextMenu(视图)
registerForContextMenu(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));
}