Pregunta

I am working on an timetable app, but I have a strange problem, I created a popupmenu that opens upon clicking an action-bar item.

The popup works, but it opens inside the action bar, I want that it opens in the view below.

enter image description here

My code..

    @Override
    public void onCreateOptionsMenu(
          Menu menu, MenuInflater inflater) {
       inflater.inflate(R.menu.lists_choice_mode_mulitplue, menu);
    }
     @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setHasOptionsMenu(true);

        }
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
          // Handle item selection
          switch (item.getItemId()) {
          case R.id.inverse:
              showPopupMenu(this.getView());
              return true;
          }
          return false;
    }
     private void showPopupMenu(View v){
         final Activity activity = getSupportActivity();
           PopupMenu popupMenu = new PopupMenu(activity, v);
              popupMenu.getMenuInflater().inflate(R.menu.popup, popupMenu.getMenu());

              popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

           @Override
           public boolean onMenuItemClick(MenuItem item) {
            Toast.makeText(activity,
              item.toString(),
              Toast.LENGTH_LONG).show();
            return true;
           }
          });

              popupMenu.show();
          }

My .xml layout files

popup.xml

 <?xml version="1.0" encoding="utf-8"?>
        <menu xmlns:android="http://schemas.android.com/apk/res/android">
          <group android:id="@+id/group_popupmenu">
              <item android:id="@+id/menu1"
                  android:title="Popup menu item 1"/>
              <item android:id="@+id/menu2"
                  android:title="Popup menu item 2"/>
              <item android:id="@+id/menu3"
                  android:title="Popup menu item 3"/>
          </group>
        </menu>

My action bar button .xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/inverse"
        android:showAsAction="always|withText"
        android:title="Week"
        android:titleCondensed="Week" />
</menu>
¿Fue útil?

Solución

Yeah it's fixed now!

Its wrong to to showPopupMenu(this.getView());

It should be the id of icon in action bar.. as following..

 @Override
         public boolean onOptionsItemSelected(MenuItem item) {
              // Handle item selection
              switch (item.getItemId()) {
              case R.id.inverse:

                  showPopupMenu(R.id.inverse);
                  return true;
              }
              return false;
        }

change showpopupmenu(view v) in

 private void showPopupMenu(int id){

             final Activity activity = getSupportActivity();
             View v = activity.findViewById(id);
               PopupMenu popupMenu = new PopupMenu(activity, v);
                  popupMenu.getMenuInflater().inflate(R.menu.popup, popupMenu.getMenu());

                  popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

               @Override
               public boolean onMenuItemClick(MenuItem item) {
                Toast.makeText(activity,
                  item.toString(),
                  Toast.LENGTH_LONG).show();
                return true;
               }
              });


                      popupMenu.show();


              }

It works now! Thanks for the answers it didn't help me but it is appreciated!

Otros consejos

You are inflating your menu layout, and I think that you want to inflate your activity layout.

check this previous question that shows how to inflate a layout:

How to inflate one view with a layout

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top