11

Meine ListView ist in PopupWindow.Android Listview in PopupWindow onitemclick funktioniert nicht auf einem Gerät

Wenn ich PopupWindow gezeigt und klicken Sie auf Listview Reihe im Gerät ASUS K00z fonepad sehr gut funktionieren.

Aber in HTC Z715e nicht funktioniert (Ereignis nicht ausgelöst onitem klicken)

1.This Layout mein Listview-Element ist

<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.Dies ist mein Pop-up 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.Dies ist mein 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 ist Code i zum Erstellen und zeigen 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); 
    } 
}); 

Wie es

EDIT lösen ich mein Problem lösen kann.

ersetzen

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

mit

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

sorry für Abfall Zeit bin ich sehr dumm.

+1

i mein Problem lösen können Sie unter siehe Bearbeiten Sie in Frage. – user2955394

+1

Vielen Dank, ich habe mir den Kopf von zwei Tagen gekratzt, und endlich habe ich deine Lösung, es funktioniert super. –

+0

Danke!es hat mir die Zeit gerettet – Dima

Antwort

1

Sie können ListAdapter statt BaseAdapter für eine Listview, verwenden möchten, und True zurück, für areAllItemsEnabled und isItemEnabled in der Klasse, die ListAdapter implementiert.

So etwas ...

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

} 

Good Luck. :)

+0

Das funktioniert nicht für mich –

3

Sie können Kontextmenü statt Popup-Menü machen es funktioniert genauso. Für Kontextmenü Erstellen von verweisen einfach auf diesen Link:

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

In diesem Link zu Creating Contextual Menus beziehen.

Sortieren exanple dazu wie folgt u Kontextmenü hinzufügen können ------ zunächst in OnClickListener registrieren wie

registerForContextMenu (Ansicht)

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