Android Listview en PopupWindow onitemclick no funciona en algún dispositivo
Mi ListView está dentro de PopupWindow.
Cuando me mostró PopupWindow y haga clic en Listview fila en el dispositivo ASUS K00z fonepad worke muy bien.
- OnItemClickListener no se activa en Android GridView
- OnItemClickListener no funciona con el elemento ListView que contiene el botón
- ListView onItemClick no funciona en la actividad
- ¿Cómo hacer que los elementos se puedan hacer clic en la vista de lista?
- La galería onItemClick y onTouchEvent no funcionan juntas desde la versión android 3.0
Pero en HTC Z715e no funciona (onitem clic evento no disparado)
1.This es mi disposición del artículo del 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.Este es mi diseño emergente
<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.Este es mi adaptador
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.Este es el código que uso para crear y mostrar 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); } });
Cómo solucionarlo es
EDIT puedo resolver mi problema.
reemplazar
this.testpopup = new PopupWindow(actionview, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
con
this.testpopup = new PopupWindow(actionview, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);
Lo siento por perder el tiempo soy muy estúpido.
- Cómo abrir diferentes actividades al hacer clic en los elementos del cajón de navegación?
- OnListItemClick no funciona para listview?
- Autocompletetextview setonitemselectedlistener no funciona
- OnItemClickListener (), cómo pasar los datos del elemento pulsado?
- OnItemClickListener usando ArrayAdapter para ListView
- ¿Cómo uso OnItemClickListener para iniciar una nueva intención en función de qué elemento se hace clic?
- Android: No se ha encontrado actividad para manejar el error de intención? Cómo va a resolver
- Android GridView OnItemLongClick escuchador llamado después de OnItemClick
Puede hacer que el menú contextual en lugar de menú emergente funcione igual como este. Para crear un menú contextual, solo tiene que consultar este enlace:
http://developer.android.com/guide/topics/ui/menus.html#context-menu
En este enlace, consulte Creating Contextual Menus
.
Ordenar exanple en esto como este u puede agregar menú contextual —— primero registrarlo en onclicklistener como
RegisterForContextMenu (ver)
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)); }
Es posible que desee utilizar ListAdapter en lugar de BaseAdapter para un ListView y devolver True para areAllItemsEnabled y isItemEnabled en la clase que implementa ListAdapter.
Algo como esto…
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; } }
Buena suerte. 🙂
- Cómo definir negrita en un selector de Android?
- ¿Puede alguien dar una buena explicación de Dagger 2?