java - एंड्रॉइड-ऑनऑप्शन इटम्स के बाहर मेनू आइटम टेक्स्ट को गतिशील रूप से कैसे बदलें या चयन करेंऑरेटऑप्शनमेनू




android menu (6)

अपने मेनू फ़ील्ड घोषित करें।

private Menu menu;

निम्नलिखित क्रिएटऑप्शनमेनू () विधि पर है

public boolean onCreateOptionsMenu(Menu menu) {
this.menu = menu;
    try {
        getMenuInflater().inflate(R.menu.menu_main,menu);
    } catch (Exception e) {
        e.printStackTrace();
        Log.i(TAG, "onCreateOptionsMenu: error: "+e.getMessage());
    }
    return super.onCreateOptionsMenu(menu);
}

आपका नाम सेटटर गतिविधि निम्नलिखित होगी। या तो बटन के माध्यम से या सशर्त कोड के माध्यम से

public void setMenuName(){
menu.findItem(R.id.menuItemId).setTitle(/*Set your desired menu title here*/);
}

यह मेरे लिए काम किया।

मैं onOptionsItemSelected(MenuItem item) मेनू onOptionsItemSelected(MenuItem item) विधि के बाहर से मेनू आइटम का शीर्षक बदलने की कोशिश कर रहा हूं।

मैं पहले से ही निम्नलिखित करता हूं;

public boolean onOptionsItemSelected(MenuItem item) {
  try {
    switch(item.getItemId()) {
      case R.id.bedSwitch:
        if(item.getTitle().equals("Set to 'In bed'")) {
          item.setTitle("Set to 'Out of bed'");
          inBed = false;
        } else {
          item.setTitle("Set to 'In bed'");
          inBed = true;
        }
        break;
    }
  } catch(Exception e) {
    Log.i("Sleep Recorder", e.toString());
  }
  return true;
}

हालांकि मैं इस विधि के बाहर किसी विशेष मेनू आइटम के शीर्षक को संशोधित करने में सक्षम होना चाहता हूं।


आप इसे वैश्विक "मेनू" ऑब्जेक्ट बना सकते हैं, फिर इसे क्रिएटऑप्शनमेनू पर असाइन करें

public class ExampleActivity extends AppCompatActivity
    Menu menu;

फिर यहां असाइन करें

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu, menu);
    this.menu = menu;
    return true;
}

फिर बाद में आवश्यक वस्तुओं को प्राप्त करने के लिए निर्दिष्ट मेनू ऑब्जेक्ट का उपयोग करें

menu.findItem(R.id.bedSwitch).setTitle("Your Text");

उन लोगों के लिए जिन्हें शीर्षक सेट को स्थिर रूप से सेट करना आवश्यक है। यह AndroidManifest.xml में किया जा सकता है

<activity
    android:name=".ActivityName"
    android:label="Title Text" >
</activity>


एक setOptionsTitle () विधि बनाएं और अपनी कक्षा में एक फ़ील्ड सेट करें। जैसे कि:

String bedStatus = "Set to 'Out of Bed'";

...

public void setOptionsTitle(String status)
{
    bedStatus = status;

}

अब जब मेनू पॉप्युलेट हो जाता है, तो शीर्षक को अपनी स्थिति में बदलें:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);

        menu.add(bedStatus);


        // Return true so that the menu gets displayed.
        return true;
    }

जैसा कि JxDarkAngel ने सुझाव दिया है, इसे अपनी गतिविधि में कहीं से भी बुलाओ,

invalidateOptionsMenu();

और फिर ओवरराइडिंग:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
  int savedRoute = mPrefs.getInt(getString(R.string.saved_route), 0);
  if (savedRoute > 0) {
    menu.findItem(R.id.action_route).setTitle("Route " + savedRoute);
  }
  return super.onPrepareOptionsMenu(menu);
}

एक बेहतर विकल्प है। मैंने https://.com/a/17496503/568197 से उत्तर का उपयोग किया


मैं आपके द्वारा प्राप्त किए गए मेनू ऑब्जेक्ट पर गतिविधि के भीतर संदर्भ को संदर्भित करने का सुझाव onCreateOptionsMenu और फिर मेनू मेनू को पुनर्प्राप्त करने के लिए इसका उपयोग कर रहा हूं जिसके लिए आपको इसकी आवश्यकता होने पर परिवर्तन की आवश्यकता होती है। उदाहरण के लिए, आप निम्न की पंक्तियों के साथ कुछ कर सकते हैं:

public class YourActivity extends Activity {

  private Menu menu;
  private String inBedMenuTitle = "Set to 'In bed'";
  private String outOfBedMenuTitle = "Set to 'Out of bed'";
  private boolean inBed = false;

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

    // Create your menu...

    this.menu = menu;
    return true;
  }

  private void updateMenuTitles() {
    MenuItem bedMenuItem = menu.findItem(R.id.bedSwitch);
    if (inBed) {
      bedMenuItem.setTitle(outOfBedMenuTitle);
    } else {
      bedMenuItem.setTitle(inBedMenuTitle);
    }
  }

}

वैकल्पिक रूप से, आप प्रत्येक बार मेनू प्रदर्शित होने पर मेनू आइटम अपडेट करने के लिए onPrepareOptionsMenu पर ओवरराइड कर सकते हैं।







menuitem