onCreateOptionsMenu টুকরো টুকরো মধ্যে


182

আমি setHasOptionsMenu(true)ভিতরে onCreateViewরেখেছি, কিন্তু আমি কল করতে পারি নাonCreateOptionsMenu টুকরো টুকরো ।

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
                         Bundle savedInstanceState) {   
   setHasOptionsMenu(true);             
   return inflater.inflate(R.layout.facesheet, container, false);
}

নীচে আমার onCreateOptionsMenuকোড দেওয়া আছে।

@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
    getSupportMenuInflater().inflate(R.menu.layout, menu);
    return (super.onCreateOptionsMenu(menu));
}

আমি পেয়েছি ত্রুটি বার্তা:

onCreateOptionsMenu(Menu)টাইপ ফ্র্যাগমেন্টের পদ্ধতি অবশ্যই একটি সুপার টাইপ পদ্ধতি ওভাররাইড বা প্রয়োগ করতে হবে।


1
'SetHasOptionsMenu (সত্য);' এর জন্য ধন্যবাদ, আমি এটি খুঁজছিলাম।
Fabricio PH

উত্তর:


497

এটা চেষ্টা কর,

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_sample, menu);
    super.onCreateOptionsMenu(menu,inflater);
}

আর এ onCreateঅপশন প্রদর্শিত করতে এই লাইন যোগ আপনারToolbar

setHasOptionsMenu(true);

182
আপনি এই লাইনটি যুক্ত না করলে এটি কল করা হবে না:setHasOptionsMenu(true);
ইয়োনান হারকিউট

10
onCreateOptionsMenu () খণ্ডের জন্য ক্রিয়াকলাপের চেয়ে আলাদা যুক্তি রয়েছে।
জোর্জে

3
এবং উপরের উত্তরগুলিতে উল্লিখিত হিসাবে ক্রিয়াকলাপে ক্রেইটঅপশনস মেনু () এর বুলিয়ান থেকে পৃথক হিসাবে পৃথক ফেরতের ধরন।
ডেক্সটার

4
আকর্ষণীয় দ্রষ্টব্য: আপনি যদি নিজের থাকা ক্রিয়াকলাপে onCreateOptionsMenu কে ওভাররাইড করেন তবে উভয় বিকল্প মেনু আইটেম প্রদর্শিত হবে।
অ্যাডাম জনস

5
setHasOptionsMenu(true);onCreate()সম্পূর্ণ হতে ডাকতে হবে।
রোল

21

আপনার ইতিমধ্যে অটোজেনারেটেড ফাইলটি রেজ / মেনু / মেনু.এক্সএমএল অ্যাকশন_সেটিংস সংজ্ঞায়িত করছে

আপনার মেইনএ্যাকটিভিটি.জভাতে নিম্নলিখিত পদ্ধতি রয়েছে:

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id) {
        case R.id.action_settings:
            // do stuff, like showing settings fragment
            return true;
    }

    return super.onOptionsItemSelected(item); // important line
}

ইন onCreateView()আপনার অসম্পূর্ণ অংশ কলের পদ্ধতি:

setHasOptionsMenu(true); 

এবং এই 2 পদ্ধতি যুক্ত করুন:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.fragment_menu, menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id) {
        case R.id.action_1:
            // do stuff
            return true;

        case R.id.action_2:
            // do more stuff
            return true;
    }

    return false;
}

পরিশেষে, নতুন ফাইল res / মেনু / ফ্রেগমেন্ট_মেনু.এক্সএমএল সংজ্ঞায়িত ক্রিয়া_1 এবং ক্রিয়া_2 যুক্ত করুন

এইভাবে যখন আপনার অ্যাপ্লিকেশনটি খণ্ডটি প্রদর্শন করে, এর মেনুতে 3 টি প্রবেশ থাকবে:

  • রেস / মেনু / ফ্রেগমেন্ট_মেনু.এক্সএমএল থেকে ক্রিয়া_
  • রেজ্যু / মেনু / ফ্রেগমেন্ট_মেনু.এক্সএমএল থেকে ক্রিয়া_2
  • রেজ / মেনু / মেনু.এক্সএমএল থেকে অ্যাকশন_সেটিংস

1
প্রশ্নটি খণ্ডগুলির মধ্যে ছিল, ক্রিয়াকলাপ নয়
অলিভিএমএম

2
@ অলিভিয়ারম উত্তরটি খণ্ড মেনুটি ব্যাখ্যা করে। এটি কীভাবে ক্রিয়াকলাপের মেনুটির সাথে ইন্টারেক্ট করে তার ব্যাখ্যাটির প্রশংসা করেছি।
আরান্দা

13

আমি @ আলেকজান্দার ফারবার এবং @ সিনো রাজ উত্তরগুলি চেষ্টা করেছিলাম। উভয় উত্তরই দুর্দান্ত, তবে আমি আমার খণ্ডের অভ্যন্তরে অনক্রিটঅ্যাপশনস মেনুটি ব্যবহার করতে পারিনি, যতক্ষণ না আমি আবিষ্কার করেছি যে:

আমার ক্রিয়াকলাপে সেটসপোর্টএকশনবার (সরঞ্জামদণ্ড) যুক্ত করুন, এর মতো:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.id.activity_main);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
}

আমি আশা করি এই উত্তরটি একই সমস্যার কারও পক্ষে সহায়ক হতে পারে।


4

কল

setSupportActionBar(toolbar)

ভিতরে

onViewCreated(...) 

খণ্ডের

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
    ((MainActivity)getActivity()).setSupportActionBar(toolbar);
    setHasOptionsMenu(true);
}

1
 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_add_customer, container, false);
        setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_sample, menu);
    super.onCreateOptionsMenu(menu,inflater);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.