Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Listview in PopupWindow onitemclick not work on some device

My ListView is inside PopupWindow.

When i shown PopupWindow and click on Listview row in device ASUS K00z fonepad worke very well.

But in HTC Z715e is not working (onitem click event not fired)

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.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.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.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.

replace

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

with

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

sorry for waste time i'm very stupid.

like image 736
user2955394 Avatar asked Sep 06 '14 03:09

user2955394


1 Answers

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/topics/ui/menus.html#context-menu

In this link refer to Creating Contextual Menus.

Sort exanple on this like this u can add context menu ------ first register it in onclicklistener like

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));  
}                            
like image 187
govind kumar Gupta Avatar answered Nov 15 '22 17:11

govind kumar Gupta