Search code examples
androidsubmenupopupmenu

How to create Popup Menu as submenu of another Popup Menu's menu item


I want to create popup menu submenu of another popup menu's menu item.Like below:

enter image description here

Advance Thanks


Solution

  • Step 1 : Main.xml

    You can use either list view or any other Composite listviews:

    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:orientation="vertical"
        >
      <ListView
          android:id="@+id/listView1"
          android:layout_width="match_parent"
          android:layout_height="wrap_content" >
      </ListView>
    
      </LinearLayout>
    

    Step 2 : listviewchild.xml

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="15dp"        
        android:layout_toRightOf="@+id/textview_name"
        android:src="@drawable/ic_launcher" />   
    

    Step 3 :

    String popUpContents[];
    PopupWindow popupWindowDogs;   
    ListView listView1;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        listView1=(ListView)findViewById(R.id.listView1);
        listView1.setAdapter(new MyAddapter(MainActivity.this)); // binding the list view.
        /*
         * initialize pop up window items list
         */
    
        // add items on the array dynamically
        // format is Company Name:: ID
        List<String> dogsList = new ArrayList<String>();
        dogsList.add("Samsung");
        dogsList.add("Google");
        dogsList.add("Yahoo");
        dogsList.add("Microsoft");
    
        // convert to simple array
        popUpContents = new String[dogsList.size()];
        dogsList.toArray(popUpContents);
    
        /*
         * initialize pop up window
         */
        popupWindowDogs = popupWindowDogs();
    
    
    }
    
    /*
     * 
     */
    public PopupWindow popupWindowDogs() {
    
        // initialize a pop up window type
        PopupWindow popupWindow = new PopupWindow(this);
    
        // the drop down list is a list view
        ListView listViewDogs = new ListView(this);
    
        // set our adapter and pass our pop up window contents
        listViewDogs.setAdapter(dogsAdapter(popUpContents));
    
        // set the item click listener
        listViewDogs.setOnItemClickListener(new DogsDropdownOnItemClickListener());
    
        // some other visual settings
        popupWindow.setFocusable(true);
        popupWindow.setWidth(250);
        popupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
    
        // set the list view as pop up window content
        popupWindow.setContentView(listViewDogs);
    
        return popupWindow;
    }
    
    /*
     * adapter where the list values will be set
     */
    private ArrayAdapter<String> dogsAdapter(String dogsArray[]) {
    
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, dogsArray) {
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
    
                // setting the ID and text for every items in the list
    
                String text = getItem(position);               
    
                // visual settings for the list item
                TextView listItem = new TextView(MainActivity.this);
    
                listItem.setText(text);
                listItem.setTag(position);
                listItem.setTextSize(22);
                listItem.setPadding(10, 10, 10, 10);
                listItem.setTextColor(Color.WHITE);
    
                return listItem;
            }
        };
    
        return adapter;
    }
    

    }

    Step 4:

        Context rContext;
        private LayoutInflater rInflater;
        private Activity activity;
    
        public MyAddapter(Context c) {
    
            rInflater = LayoutInflater.from(c);
    
            rContext = c;
    
        }      
    
        public MyAddapter(Activity imagebinding) {
            // TODO Auto-generated constructor stub
    
            activity = imagebinding;        
    
            rContext = imagebinding;
            rInflater = LayoutInflater.from(imagebinding);
            rContext = imagebinding;
            rInflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
    
    
        }
    
        @Override
        public int getCount() {
            // TODO Auto-generated method stub    
    
    
            return 10;
        }
    
        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return null;
        }
    
        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }
    
        @Override
        public View getView(final int position, View convertView,
                ViewGroup parent) {
            // TODO Auto-generated method stub
            convertView = rInflater.inflate(R.layout.child, null);
            final MyDat mydat = new MyDat();    
    
            mydat.imageView1=(ImageView)convertView.findViewById(R.id.imageView1);
            mydat.imageView1.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    popupWindowDogs.showAsDropDown(v, -5, 0);
    
                }
            });
    
            return convertView;
        }
    
        class MyDat {        
    
    
            ImageView imageView1;           
    
        }
    

    Step 5 :

    @Override
    public void onItemClick(AdapterView<?> arg0, View v, int arg2, long arg3) {
    
        // get the context and main activity to access variables
        Context mContext = v.getContext();
        MainActivity mainActivity = ((MainActivity) mContext);
    
        // add some animation when a list item was clicked
        Animation fadeInAnimation = AnimationUtils.loadAnimation(v.getContext(), android.R.anim.fade_in);
        fadeInAnimation.setDuration(10);
        v.startAnimation(fadeInAnimation);
    
        // dismiss the pop up
        mainActivity.popupWindowDogs.dismiss();
    
        // get the text and set it as the button text
    
        Toast.makeText(mContext, "Selected Positon is: " + arg2, 100).show();
    
    
    }