Popup Menu in custom ListView

前端 未结 7 1482
礼貌的吻别
礼貌的吻别 2020-12-05 11:44

What I want to achieve:

I have a custom ListView adapter. To each Listitem I want to add a popup menu, pretty similar to the ListView in the current Google Play appl

7条回答
  •  盖世英雄少女心
    2020-12-05 12:24

    First create a button in your custom-item-listview.xml and then add the code below:

    Button:

    class:

    public class CustomAdapter extends ArrayAdapter {
    
        private static Activity context = null;
        private final ArrayList mItemsArrayList;
        private CustomFragment mFragment;
    
    
        public CustomAdapter(Activity context, ArrayList itemsArrayList, CustomFragment fragment) {
    
            super(context, R.layout.watch_list_row, itemsArrayList);
    
            CustomAdapter.context = context;
            this.mItemsArrayList = itemsArrayList;
            this.mFragment = fragment;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            final int pos = position;
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
            final View rowView = inflater.inflate(R.layout.watch_list_row, parent, false);
        final Button popUp_btn = (Button)rowView.findViewById(R.id.button1);
        popUp_btn.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
                final PopupMenu popup = new PopupMenu(context, popUp_btn);
                popup.getMenuInflater().inflate(R.menu.context_menu, popup.getMenu());
                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    public boolean onMenuItemClick(MenuItem item) {
                        int i = item.getItemId();
                        if (i == R.id.item1) {
                            //do something
                            return true;
                        }
                        else if (i == R.id.item2){
                            //do something
                            return true;
                        }
                        else if (i == R.id.item3) {
                            //do something
                            return true;
                        }
                        else {
                            return onMenuItemClick(item);
                        }
                    }
                });
    
                popup.show();
    

    EDIT: This works well for me:

    TAB1

    public  class TAB1 extends Fragment {
    View view;
    
    public TAB1() {
    }
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.tab1, null);
    
    
                ListView list = (ListView) view.findViewById(android.R.id.list);
                CustomList adapter = new CustomList(getActivity());
                adapter.addAll();
                list.setAdapter(adapter);
    
    
        return view;
    }
    

    CustomList:

    public class CustomList extends ArrayAdapter {
    
    private static Activity context = null;
    
    public CustomList(Activity context) {
        super(context, R.layout.custom_listview, web);
        CustomList.context = context;
    }
    @Override
    public View getView(final int position, View view, ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
        final View rowView = inflater.inflate(R.layout.custom_listview, null, true);
    
        //your stuff here
    
        final Button popUp_btn = (Button)rowView.findViewById(R.id.button1);
        popUp_btn.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
                final PopupMenu popup = new PopupMenu(context, popUp_btn);
                popup.getMenuInflater().inflate(R.menu.context_menu, popup.getMenu());
                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    public boolean onMenuItemClick(MenuItem item) {
                        int i = item.getItemId();
                        if (i == R.id.item1) {
                            //do something
                            return true;
                        }
                        else if (i == R.id.item2){
                            //do something
                            return true;
                        }
                        else if (i == R.id.item3) {
                            //do something
                            return true;
                        }
                        else {
                            return onMenuItemClick(item);
                        }
                    }
                });
    
                popup.show();
    
            }
        });
    
        return rowView;
    
    }
    

提交回复
热议问题