क्या कार्यक्रम मेनू आइटम को प्रोग्रामेटिक रूप से बदलना संभव है? क्या कोई मुझे एक उदाहरण प्रदान कर सकता है?
इसके अलावा, मैं कुछ वस्तुओं को निष्क्रिय करना चाहता हूं, ताकि वे क्लिकों को न सुनें, क्या यह संभव है?
जवाबों:
किसी को भी मेनू के विकल्पों को गतिशील रूप से बदलने की आवश्यकता है:
private Menu menu;
// ...
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
this.menu = menu;
getMenuInflater().inflate(R.menu.options, menu);
return true;
}
// ...
private void hideOption(int id)
{
MenuItem item = menu.findItem(id);
item.setVisible(false);
}
private void showOption(int id)
{
MenuItem item = menu.findItem(id);
item.setVisible(true);
}
private void setOptionTitle(int id, String title)
{
MenuItem item = menu.findItem(id);
item.setTitle(title);
}
private void setOptionIcon(int id, int iconRes)
{
MenuItem item = menu.findItem(id);
item.setIcon(iconRes);
}
item.setVisible(false);
, तो केवल मेनू पर क्लिक करने पर आइटम छिप जाता है। यदि मैं invalidateOptionsMenu();
आइटम का उपयोग करता हूं तो क्लिक करने के लिए प्रतिक्रिया न करें। मैं सराहना करता हूं कि क्या आप इसी तरह के मुद्दे पर मेरी मदद कर सकते हैं जो मैं सामना कर रहा हूं। stackoverflow.com/questions/54756799/…
setVisible
राज्यों का प्रलेखन जिसे आपको भी कॉल करना चाहिए setEnabled(false)
अन्यथा आइटम अभी भी शॉर्टकट के माध्यम से मंगाया जा सकता है
menu.xml
<item
android:id="@+id/item1"
android:title="your Item">
</item>
अपनी जावा फ़ाइल में डालें
public void onPrepareOptionsMenu(Menu menu) {
menu.removeItem(R.id.item1);
}
जैसे निकोले ने कहा कि onPrepareOptionsMenu () में करो।
एक्शन बार में मेनू आइटम के लिए आपको मेनू को अमान्य करना होगा
activity.invalidateOptionsMenu();
यह यहाँ और अधिक विस्तार से वर्णन किया गया है कि मैं कैसे चालू कर सकता हूं जब एवरबेर को ऑनप्रेपरऑउंसमेन्स मीनू स्विच की गई मेनू एंट्रीज?
अगर मुझे अपने विकल्प मेनू की सामग्री को बदलना है तो मैं इसे ऑनमेन्यूपेंड () के दौरान करता हूं। यह मुझे उसी क्षण चालू स्थिति की जांच करने की अनुमति देता है जो उपयोगकर्ता मेनू तक पहुंच रहा है।
public boolean onMenuOpened(int featureid, Menu menu)
{
menu.clear();
if (!editable)
{
MenuItem itemAdd = menu.add(0, REASSIGN, Menu.NONE, context.getString(R.string.reassign));
MenuItem itemMod = menu.add(1, EDIT, Menu.NONE, context.getString(R.string.modify));
MenuItem itemDel = menu.add(2, DELETE, Menu.NONE, context.getString(R.string.delete));
itemAdd.setShortcut('0', 'a');
itemMod.setShortcut('1', 'm');
itemDel.setShortcut('2', 'd');
}
else
{
MenuItem itemSave = menu.add(3, SAVE, Menu.NONE, context.getString(R.string.savechanges));
itemSave.setShortcut('0', 'S');
}
return true;
}
कुछ वस्तुओं को निष्क्रिय करने के लिए:
MenuItem item = menu.findItem(R.id.ID_ASSING_TO_THE_ITEM_IN_MENU_XML);
item.setEnabled(false);
item.setVisible(false);
, तो मेरा आइटम केवल तब छिपा होता है जब मैं मेनू पर ही क्लिक करता हूं (तीन डॉट्स)। अगर मैं invalidateOptionsMenu();
कुछ वस्तुओं का उपयोग करता हूं तो क्लिक करने के लिए प्रतिक्रिया न करें। मैं सराहना करता हूं कि क्या आप इसी तरह के मुद्दे पर मेरी मदद कर सकते हैं जो मैं सामना कर रहा हूं। stackoverflow.com/questions/54756799/…
मेनू में मान जोड़ने के लिए मैंने निम्नलिखित पंक्तियों का उपयोग किया है
getActivity().invalidateOptionsMenu();
मेरे लिए एक आकर्षण की तरह इस काम की कोशिश करो।
इस कोड को आज़माएं:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
this.menu=menu;
updateMenuItems(menu);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.document_list_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
if (item.getItemId() == android.R.id.home) {
onHomeButtonPresssed();
}else if (item.getItemId() == R.id.action_delete) {
useCheckBoxAdapter=false;
deleteDocuments();
} else if (item.getItemId() == R.id.share) {
useCheckBoxAdapter=false;
shareDocuments();
} else if (item.getItemId() == R.id.action_tick) {
useCheckBoxAdapter=true;
onShowCheckboxes();
}
updateMenuItems(menu);
return true;
}
private void updateMenuItems(Menu menu){
if (useCheckBoxAdapter && menu != null) {
menu.findItem(R.id.action_delete).setVisible(true);
menu.findItem(R.id.share).setVisible(true);
menu.findItem(R.id.action_tick).setVisible(false);
} else {
menu.findItem(R.id.action_delete).setVisible(false);
menu.findItem(R.id.share).setVisible(false);
menu.findItem(R.id.action_tick).setVisible(true);
}
invalidateOptionsMenu();
}
invalidateOptionsMenu();
, मेरे हमेशा दिखाई देने वाले आइटम काम करना बंद कर देते हैं (मेरा मतलब है कि आइटम क्लिक करने के लिए प्रतिक्रिया नहीं देते हैं)। मैं सराहना करता हूं कि क्या आप इसी तरह के मुद्दे पर मेरी मदद कर सकते हैं जो मैं सामना कर रहा हूं। stackoverflow.com/questions/54756799/…
आप कुछ सरल कर सकते हैं जैसे मैंने किया। मेनू आइटम को छूने पर जो आवश्यक है उसे बस टेक्स्ट में बदलें। मुझे ध्वनि को बंद करने और चालू करने की आवश्यकता थी, साथ ही इसे छूने से कार्रवाई करने की क्षमता। यहाँ मेरा कोड है:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.audioOn:
audioOn = !audioOn;
if (audioOn)
item.setTitle("Audio Off");
else
item.setTitle("Audio On");
return true;
case R.id.touchOn:
touchOn = !touchOn;
if (touchOn)
item.setTitle("Touch Off");
else
item.setTitle("Touch On");
return true;
default:
return super.onOptionsItemSelected(item);
}
}
ऑडियोऑन और टचऑन कोड के अन्य भागों में चेक किए गए बूलियन हैं। उम्मीद है की यह मदद करेगा।
आप नीचे के रूप में लागू करके अपना काम पूरा कर सकते हैं:
private Menu menu;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.drive_menu, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
this.menu = menu;
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_toggle_grid) {
handleMenuOption(id);
return true;
} else if(id == R.id.action_toggle_list){
handleMenuOption(id);
return true;
}
return super.onOptionsItemSelected(item);
}
private void handleMenuOption(int id) {
MenuItem item = menu.findItem(id);
if (id == R.id.action_toggle_grid){
item.setVisible(false);
menu.findItem(R.id.action_toggle_list).setVisible(true);
}else if (id == R.id.action_toggle_list){
item.setVisible(false);
menu.findItem(R.id.action_toggle_grid).setVisible(true);
}
}
मामले में आपके पास एक बॉटबर है:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (mBottomBar.getCurrentTabId() == R.id.tab_more) {
getMenuInflater().inflate(R.menu.more_menu, menu);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.preferences:
startActivity(new Intent(this, PreferenceActivity.class));
break;
}
return super.onOptionsItemSelected(item);
}
फिर आपको बस कॉल करने की आवश्यकता है:
@Override
public void onBottomBarClick(int tabId) {
supportInvalidateOptionsMenu();
}
उपकरण पट्टी विकल्प तक पहुँचने के लिए कोटलिन कोड
1-हम मेनू आइटम फ़ाइल में हमारे मेनू आइटम की तरह है: menu.xml, इस के लिए नमूना कोड:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/balance"
android:title="0"
android:orderInCategory="100"
app:showAsAction="always" />
</menu>
2- कक्षा में मेनू ऑब्जेक्ट तक पहुँचने के लिए एक चर को परिभाषित करें:
var menu: Menu? = null
3- ऑनक्रिएट ऑउटफिट्स में इसे शुरू करें: मीनू:
override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; this adds items to the action bar if it is present.
menuInflater.inflate(R.menu.main, menu)
this.menu = menu
return true
}
4- अपने कोड या मस्ती के अंदर मेनू आइटम एक्सेस करें:
private fun initialBalanceMenuItemOnToolbar() {
var menuItemBalance = menu?.findItem(R.id.balance)
menuItemBalance?.title = Balance?.toString() ?: 0.toString()
// for change icon : menuWalletBalance?.icon
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.calendar, menu);
if(show_list == true) {
if(!locale.equalsIgnoreCase("sk")) menu.findItem(R.id.action_cyclesn).setVisible(false);
return true;
}
menu
प्रयास से पहले सेट किया गयाMenuItem
है। उदाहरण के लिए, आप की तरह कुछ पूछना चाहते हैं तोactionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS)
, टैब मेनू से पहले लोड किए गए हैं, इसलिए बुलाhideOption
/showOption
भीतरonTabSelected
एक नल पॉइंटर एक्सेप्शन में परिणाम है।