Android Listview dans PopupWindow onitemclick ne fonctionne pas sur un périphérique

Mon ListView est dans PopupWindow.

Lorsque j'ai montré PopupWindow et que je clique sur ListView dans le périphérique, ASUS K00z fonepad fonctionne très bien.

  • Comment interroger le MMS Log in Android
  • La hauteur de l'onglet ActionBarSherlock n'est pas réglable sur Jelly Bean
  • Comment puis-je déplacer une image d'un point à l'autre à l'aide d'Android Canvas
  • Android - Comment définir une mise en page semi-transparente?
  • Différence entre Service, Async Task & Thread?
  • Un problème de Switch Java: les expressions de cas doivent être des expressions constantes
  • Mais dans HTC Z715e ne fonctionne pas (événement Onitem Click non déclenché)

    1.C'est la disposition de mon article 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.C'est cette disposition contextuelle

     <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. C'est mon adaptateur

     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. C'est le code que j'utilise pour créer et afficher le 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); } }); 

    Comment le résoudre

    EDIT, je peux résoudre mon problème.

    remplacer

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

    avec

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

    Désolé pour le temps perdu, je suis très stupide.

  • Comment avoir plusieurs instances de Service dans Android
  • Lecture rapide de fichiers .wav - Android
  • Comment utiliser runOnUiThread
  • La méthode onFrameAvailable () de SurfaceTexture est toujours trop tard
  • Fragment Inside Fragment
  • Portant la Java VM d'Android vers l'iPhone?
  • 2 Solutions collect form web for “Android Listview dans PopupWindow onitemclick ne fonctionne pas sur un périphérique”

    Vous pouvez créer un menu contextuel au lieu du menu contextuel. Il fonctionne comme celui-ci. Pour créer un menu contextuel, reportez-vous à ce lien:

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

    Dans ce lien, reportez-vous à la section Creating Contextual Menus .

    Sort exanple on this like this u can add menu —— first register it onclicklistener comme

    RegisterForContextMenu (voir)

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

    Vous pouvez utiliser ListAdapter au lieu de BaseAdapter pour ListView et renvoyer True pour areAllItemsEnabled et isItemEnabled dans la classe qui implémente ListAdapter.

    Quelque chose comme ça…

     class CustomListAdapter implements ListAdapter { Activity callingActivity; ArrayList<String> items; public CustomListAdapter(Activity act, ArrayList<String> list) { callingActivity = act; items = list; } @Override public void registerDataSetObserver(DataSetObserver observer) { } @Override public void unregisterDataSetObserver(DataSetObserver observer) { } @Override public int getCount() { return items.size(); } @Override public Object getItem(int position) { return items.get(position); } @Override public long getItemId(int position) { return 0; } @Override public boolean hasStableIds() { return false; } @Override public View getView(int position, View convertView, ViewGroup parent) { AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.WRAP_CONTENT); LinearLayout ll = new LinearLayout(callingActivity); ll.setLayoutParams(params); ll.setGravity(Gravity.CENTER); ll.setOrientation(LinearLayout.HORIZONTAL); ll.setPadding(5, 5, 5, 5); // // Code for your list item here... // return ll; } @Override public int getItemViewType(int position) { return 0; } @Override public int getViewTypeCount() { return 1; } @Override public boolean isEmpty() { return false; } @Override public boolean areAllItemsEnabled() { return true; } @Override public boolean isEnabled(int position) { return true; } } 

    Bonne chance. 🙂

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.