i have a recycle view and on it item click i want to popup menu but it have too much width and going out side of the recycle view item width how to set it any body help me out of this problem thanks in advance.
here is image of problem
My menu Code
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
>
<item android:id="#+id/edit"
android:title="Edit"/>
<item android:id="#+id/delete"
android:title="Delete"/>
code of recycler view itemclick
holder.img_menu.setOnClickListener(new View.OnClickListener() {
#SuppressLint("ResourceType")
#Override
public void onClick(final View v) {
PopupMenu popupMenu = new PopupMenu(v.getContext(), holder.img_menu);
popupMenu.inflate(R.menu.feedoptions);
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
#Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.edit:
Toast.makeText(v.getContext(), "Edit will Available Soon", Toast.LENGTH_SHORT).show();
break;
case R.id.delete:
Toast.makeText(v.getContext(), "Delete Option Will Available Soon", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return true;
}
});
popupMenu.show();
}
});
Related
I have a recycler view and card view. The card layout has 3 dots which on clicked, shows popup menu. Everything is working fine, but there is a small problem. If I clicked the top card, popup menu is displayed at the bottom of recycler view. If I clicked the middle card the popup menu is displayed at the top-left of the activity and like so on. I want that, if card_1's popup menu is pressed, it should show at card_1 and similarly, popup menu should displayed at their respective cards. I don't know where the problem is. Please help!!!
Here is the Menu Layout menu_options.xml
<?xml version="1.0" encoding="utf-8"?>
<item
android:id="#+id/menu1"
android:title="Edit " />
<item
android:id="#+id/menu2"
android:title="Delete " />
Here is the method by which menu shows up. It is in CardViewAdapter used for my Recycler View.
#Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
...
threeDots = (TextView)cardView.findViewById(R.id.options);
threeDots.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
PopupMenu popupMenu = new PopupMenu(context, threeDots);
popupMenu.inflate(R.menu.menu_options);
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){
#Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.menu1: int pos = holder.getAdapterPosition();
onEdit(pos);
break;
case R.id.menu2: Toast.makeText(context, "Swipe LEFT to delete the card", Toast.LENGTH_LONG)
.show();
break;
}
return false;
}
});
popupMenu.show();
}
});
}
Use this instead:
public void onBindViewHolder(final ViewHolder holder, final int position) {
...
holder.threeDots.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
PopupMenu popupMenu = new PopupMenu(context, holder.threeDots);
popupMenu.inflate(R.menu.menu_options);
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){
#Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.menu1: int pos = holder.getAdapterPosition();
onEdit(pos);
break;
case R.id.menu2: Toast.makeText(context, "Swipe LEFT to delete the card", Toast.LENGTH_LONG)
.show();
break;
}
return false;
}
});
popupMenu.show();
}
});
}
I am using an image button for a popup menu to popup everything is working fine but when I select an item in the menu the item is selected and it doesn't show the selection so that I could identify the selected item.The checkbox remains unchecked even after the selection
menu_icon_img=myView.findViewById(R.id.Id_customer_over_flow);
menu_icon_img.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
if (getActivity() != null) {
PopupMenu popup = new PopupMenu(getActivity(), v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.sort_menu_items, popup.getMenu());
popup.show();
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
#Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.select_name_a_z:
if (item.isChecked()) item.setChecked(false);
else item.setChecked(true);
return true;
case R.id.select_name_z_a:
if (item.isChecked()) item.setChecked(false);
else item.setChecked(true);
return true;
default:
return false;
}
}
});
}
}
XML
<menu xmlns:android="http://schemas.android.com/apk/res/android"
>
<group
android:checkableBehavior="single"
>
<item
android:id="#+id/select_name_a_z"
android:title="#string/name_a_z"
android:checkable="true"
/>
<item
android:id="#+id/select_name_z_a"
android:title="#string/name_z_a"
android:checkable="true"
/>
</group>
</menu>
The problem is you are creating the popup menu from onClick of an imageview. whenever a click event occures a new instance of popup menu is being created.
to avoid this initiate the popup menu in onCreate method. And call popup.show() from onClick() method.
Toolbar menus are supposed to navigate you the specified activities or fragments on click of the pop up.I am not sure what is the problem , but once you click on any MenuItem it will navigate you to given Intent associated with the the id for example,
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.select_name_a_z:
Intent intent=new Intent(MainActivity.this,SecondActivity.this);
startActivity(intent);
return true;
If you are using a checkable menu item then change the below code from
case R.id.select_name_z_a:
if (item.isChecked())
item.setChecked(false);
else item.setChecked(true);
return true;
Do like
if (!item.isChecked()) item.setChecked(true);
Because item.ischecked() is false in the beginning state.
Made some changes to your above code, Try this
menu_icon_img=findViewById(R.id.Id_customer_over_flow);
popup = new PopupMenu(getApplicationContext(), menu_icon_img);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.sort_menu_items, popup.getMenu());
menu_icon_img.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
if (this != null) {
popup.show();
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
#Override
public boolean onMenuItemClick(MenuItem item) {
Menu menu = popup.getMenu();
for(int i = 0;i<menu.size();i++){
menu.getItem(i).setChecked(false);
}
item.setChecked(true);
return true;
}
});
}
}
});
Also for all items in menu set:
android:checkable="true"
listview item
Popup-menu :
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.edusols.HomeActivity" >
<item
app:showAsAction="never"
android:id="#+id/one"
android:title="abcd" />
<item
android:id="#+id/two"
android:title="Two"/>
<item
android:id="#+id/three"
android:title="Three"/>
</menu>
I have a listview, i have option like edit post and all that
I want popup-menu on particular position, i am getting pop-up menu but not at correct position
I have set pop-up menu in listview adapter
code:
ivOptionMenu.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
if (post_user_id.equals(preferenceHelper.getID()))
{
PopupMenu popup = new PopupMenu(ctx, ivOptionMenu);
popup.getMenuInflater().inflate(R.menu.poupup_menu, popup.getMenu());
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(ctx,"You Clicked : " + item.getTitle(),Toast.LENGTH_SHORT).show();
return true;
}
});
popup.show();//showing popup menu
}
else {
PopupMenu popup = new PopupMenu(ctx, ivOptionMenu);
popup.getMenuInflater().inflate(R.menu.poupup_menu, popup.getMenu());
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(ctx,"You Clicked : " + item.getTitle(),Toast.LENGTH_SHORT).show();
return true;
}
});
popup.show();//showing popup menu
}
How menu appears on click
Create xml file in /res/menu/popup_menu.xml and add these code
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="#+id/action1"
android:title="delete" />
<item
android:id="#+id/action2"
android:title="properties" />
<item
android:id="#+id/action3"
android:title="add to queue" />
<item
android:id="#+id/action4"
android:title="play next" />
<item
android:id="#+id/action5"
android:title="add to favorite" />
</menu>
Use this code in java file:
mViewHolder.imagemore.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
final PopupMenu menu = new PopupMenu(context, v);
menu.getMenuInflater().inflate(R.menu.popup_menu, menu.getMenu());
menu.show();
menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
#Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action1:
deleteSong(position);
break;
case R.id.action2:
Toast.makeText(context, "your desire action is " + item.toString(), Toast.LENGTH_SHORT).show();
break;
case R.id.action3:
Toast.makeText(context, "your desire action is " + item.toString(), Toast.LENGTH_SHORT).show();
break;
case R.id.action4:
Toast.makeText(context, "your desire action is " + item.toString(), Toast.LENGTH_SHORT).show();
break;
case R.id.action5:
Toast.makeText(context, "your desire action is " + item.toString(), Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return true;
}
});
}
});
PopMenuConstructor(ctx,view)
view by which PopMenu will connected.
#Override
public void onClick(View v) {
if (post_user_id.equals(preferenceHelper.getID())) {
//PopupMenu popup = new PopupMenu(ctx, ivOptionMenu);
//change to this
PopupMenu popup = new PopupMenu(ctx, v);
.
.
}
}
I've implemented a popup menu to my android application. I've created a xml for popup menu and code also works fine. Now what i cant figure out is how to handle popup menu items click. I've tried using PopupMenu.OnMenuItemClickListener but was not successful. How can i do this?
My code for popup menu
ImageButton button = (ImageButton) view.findViewById(R.id.popUp_song);
button.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
PopupMenu popup = new PopupMenu(activity, v);
Menu m = popup.getMenu();
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.song_popup, popup.getMenu());
if (audio.getDownload().equals("0")) {
m.removeItem(R.id.add_download);
}
popup.show();
}
});
xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
style="#style/ToolBarStyle">
<item
android:id="#+id/add_queue"
android:title="Add to queue" />
<item
android:id="#+id/play_next"
android:title="Add to favourite" />
<item
android:id="#+id/add_download"
android:title="Download" />
</menu>
Before showing the PopupMenu add a listener for PopupMenu for handling the click events.
popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
#Override
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(getApplicationContext(),
item.getTitle(), Toast.LENGTH_SHORT).show();
return true;
}
});
If you need to take a click of the popup menu on the basis of id, below is the right way to do this:
popup.setOnMenuItemClickListener(item -> {
if (item.getItemId() == R.id.miEmail) {
Toast.makeText(getApplicationContext(), "Email clicked", Toast.LENGTH_SHORT).show();
} else if (item.getItemId() == R.id.miCall) {
Toast.makeText(getApplicationContext(), "Call clicked", Toast.LENGTH_SHORT).show();
}
return true;
});
I want to show DropDown menu on MenuItem click just like this.
Like this
Note that this item was added like:
<item
android:id="#+id/menu_item_action_parameters"
android:title="#string/text_parameters"
android:icon="#drawable/ic_menu_parameter"
app:showAsAction="ifRoom|withText"/>
</item>
And in my code:
#Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.menu_item_action_parameters:
// What to do here?
break;
}
return super.onOptionsItemSelected(item);
}
I have seen this link but I have came to know that ActionBar.setListNavigationCallbacks() has been deprecated.
Thanks!
Create your menu xml as follow
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="#+id/menu_item_action_parameters"
android:title="#string/text_parameters"
android:icon="#drawable/ic_menu_parameter"
app:showAsAction="ifRoom|withText"/> >
<menu>
<item
android:id="#+id/action_dropdown1"
android:title="#string/dropdown_1" />
<item
android:id="#+id/action_dropdown2"
android:title="#string/dropdown2" />
<item
android:id="#+id/action_dropdown3"
android:title="#string/dropdown3" />
</menu>
</item>
<item
more item
</item>
</menu>
Then
#Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_dropdown1:
...
return true;
case R.id.action_dropdown2:
...
return true;
...
default:
return super.onOptionsItemSelected(item);
}
}
try custom popup menu
menu.Xml
<menu xmlns:androclass="http://schemas.android.com/apk/res/android" >
<item
android:id="#+id/one"
android:title="One"/>
<item
android:id="#+id/two"
android:title="Two"/>
<item
android:id="#+id/three"
android:title="Three"/>
</menu>
call this code on buttonClick
button = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
//Creating the instance of PopupMenu
PopupMenu popup = new PopupMenu(MainActivity.this, button1);
//Inflating the Popup using xml file
popup.getMenuInflater().inflate(R.menu.menu, popup.getMenu());
//registering popup with OnMenuItemClickListener
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(MainActivity.this,"You Clicked : " + item.getTitle(),Toast.LENGTH_SHORT).show();
return true;
}
});
popup.show();//showing popup menu
}
});//closing the setOnClickListener method
}
what about showing popup menu when clicking onthat item ?
here is the code :
#Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_notifi) {
// here we show the popup menu
popup();
}
return super.onOptionsItemSelected(item);
}
public void popup(){
PopupMenu popup = new PopupMenu(MainActivity.context, v); //the v is the view that you click replace it with your menuitem like : menu.getItem(1)
popup.getMenuInflater().inflate(R.menu.medecin_list_menu,
popup.getMenu());
popup.show();
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
#Override
public boolean onMenuItemClick(MenuItem item2) {
switch (item2.getItemId()) {
case R.id.Appeler:
//do somehting
break;
case R.id.EnvoyerMsg:
//do somehting
break;
case R.id.AfficherDet:
//do somehting
break;
case R.id.Afficher:
//do somehting
break;
case R.id.AvoirRdv:
//do somehting
break;
default:
break;
}
return true;
}
});
}
});
}
and here is the medecin_list_menu (my menu)
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="#+id/Appeler"
android:title="#string/Appeler" />
<item
android:id="#+id/EnvoyerMsg"
android:title="#string/envoyerMsg" />
<item
android:id="#+id/Afficher"
android:title="#string/Afficher" />
<item
android:id="#+id/AvoirRdv"
android:title="#string/avoirRdv" />
<item
android:id="#+id/AfficherDet"
android:title="#string/afficherDet" />
</menu>
Last Edit:
see this tutorial http://www.androidhive.info/2013/11/android-working-with-action-bar/