Search code examples
androidlistviewandroid-custom-view

how to add popup menu to custom listview to each item android


I am stuck at one point. I want to add popup menu to each item in custom list view. I have tried but it is only popping up at last position or last item of list.I am getting reason why it is coming at last position but not getting the solution here i am adding the adapter class

public class InterestLevelAdapterEditable extends BaseAdapter {

    private Activity activity;
    private  TextView level;
    private InterestLevel m;
    private LayoutInflater inflater;
    private List<InterestLevel> interestLevelList;

    public InterestLevelAdapterEditable(Activity activity, List<InterestLevel> interestLevelList) {
        this.activity = activity;
        this.interestLevelList = interestLevelList;
    }

    @Override
    public int getCount() {
        return interestLevelList.size();
    }

    @Override
    public Object getItem(int location) {
        return interestLevelList.get(location);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if (inflater == null)
            inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null)
            convertView = inflater.inflate(R.layout.interest_level_editable, null);


        TextView sports_name = (TextView) convertView.findViewById(R.id.sportsName);
        level = (TextView) convertView.findViewById(R.id.level);

         m = interestLevelList.get(position);

        sports_name.setText(m.getSports_name());

        level.setText(m.getLevel());
        level.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Creating the instance of PopupMenu
                PopupMenu popup = new PopupMenu(activity, level);
                //Inflating the Popup using xml file
                popup.getMenuInflater().inflate(R.menu.popup_level, popup.getMenu());

                //registering popup with OnMenuItemClickListener
                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    public boolean onMenuItemClick(MenuItem item) {
                        level.setText(item.getTitle());
                        return true;
                    }
                });

                popup.show();//showing popup menu
            }
        });

        return convertView;
    }

}

I am getting reason that i will have to pass position in on click listener but not getting how should i add the position or (m object of InterestLevel which is having position).

Thanks in advance. Screenshot


Solution

  • I need popup menu as like listview. I try this code and it's right(reference):

    private static final String TITLE = "title";
    private static final String ICON = "icon";
    
    private List<HashMap<String, Object>> data = new ArrayList<HashMap<String, 
    Object>>();
    
    // Use this to add items to the list that the ListPopupWindow will use
    private void addItem(String title, int iconResourceId) {
    HashMap<String, Object> map = new HashMap<String, Object>();
    map.put(TITLE, title);
    map.put(ICON, iconResourceId);
    data.add(map);
    }
    
    // Call this when you want to show the ListPopupWindow
    private void showListMenu(View anchor) {
    ListPopupWindow popupWindow = new ListPopupWindow(this);
    
    ListAdapter adapter = new SimpleAdapter(
            this,
            data,
            android.R.layout.activity_list_item, // You may want to use your own cool layout
            new String[] {TITLE, ICON}, // These are just the keys that the data 
    uses
            new int[] {android.R.id.text1, android.R.id.icon}); // The view ids 
    to map the data to
    
    
    popupWindow.setAnchorView(anchor);
    popupWindow.setAdapter(adapter);
    popupWindow.setWidth(400); // note: don't use pixels, use a dimen resource
    popupWindow.setOnItemClickListener(myListener); // the callback for when a list item is selected
    popupWindow.show();
    }
    

    custom layout and work as listview