অ্যান্ড্রয়েডে টুকরো টুকরো বিকল্প বিকল্পগুলি কীভাবে যুক্ত করবেন


399

আমি টুকরাগুলির একটি গ্রুপ থেকে বিকল্প মেনুতে একটি আইটেম যুক্ত করার চেষ্টা করছি।

আমি একটি নতুন তৈরি করেছি MenuFragment মেনু আইটেমটি অন্তর্ভুক্ত করতে ইচ্ছুক খণ্ডগুলির জন্য শ্রেণী এবং এটি প্রসারিত করেছি the কোডটি এখানে:

জাভা:

public class MenuFragment extends Fragment {

    MenuItem fav;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        fav = menu.add("add");
        fav.setIcon(R.drawable.btn_star_big_off);
    }
}

Kotlin:

class MenuFragment : Fragment {

    lateinit var fav: MenuItem

    override fun onCreate(savedInstanceState: Bundle) {
        super.onCreate(savedInstanceState)
        setHasOptionsMenu(true)
    }

    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
        fav = menu.add("add");
        fav.setIcon(R.drawable.btn_star_big_off);
    }
}

কিছু কারণে onCreateOptionsMenuপ্রদর্শিত হয় না চালানো।


সম্ভবত একটি নির্বোধ প্রশ্ন ... আপনি ডান মেনু বোতাম টিপুন?
ওভিদিউ লাটকু

2
..আমি ... হ্যাঁ আমি মেনু বোতাম টিপলাম, আমি এটি ছাড়া এবং ছাড়াও চেষ্টা করেছি: fav.setShowAsAction (MenuItem.SHOW_AS_ACTION_ALWAYS);
মিস্টারব্যাসম্যান

হাই, সম্ভবত এই থ্রেড আপনাকে সহায়তা করবে বা একটি কাজের উদাহরণের জন্য এপিআই ডেমোটি পরীক্ষা করবে ।
কামেনি

উত্তর:


604

সুপার পদ্ধতি কল করুন:

জাভা:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // TODO Add your menu entries here
        super.onCreateOptionsMenu(menu, inflater);
    }

Kotlin:

    override fun void onCreate(savedInstanceState: Bundle) {
        super.onCreate(savedInstanceState)
        setHasOptionsMenu(true)
    }

    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
        // TODO Add your menu entries here
        super.onCreateOptionsMenu(menu, inflater)
    }

কোডটি কল করা হচ্ছে না বা আপনার কোড দ্বারা মেনুটি সংশোধন করা হচ্ছে না তা দেখার জন্য কোডটিতে লগ স্টেটমেন্ট দিন।

এছাড়াও নিশ্চিত করুন যে আপনি খণ্ডটি জানানোর জন্য কল setHasOptionsMenu(boolean)করছেন onCreate(Bundle)যে এটি বিকল্প মেনু হ্যান্ডলিংয়ে অংশ নিতে পারে।


2
সহায়তার জন্য ধন্যবাদ, আমি সুপার পদ্ধতিটি যুক্ত করেছি এবং বুঝতে পেরেছি যে আমি @ ওভাররাইডটিকে সরিয়ে দিয়েছিলে তাই এটি পিছনে যুক্ত হয়েছে, গ্রহপসে একটি ত্রুটি ছুঁড়েছে তাই আমি অ্যান্ড্রয়েড.ভিউ.মেনুআইনফ্লেটার আমদানিতে মেনুআইনফ্লেটারকে প্রতিস্থাপন করেছি; আমদানির পরিবর্তে android.support.v4.view.MenuInflater; এবং এখন সবাই কাজ করছে
মিস্টারবাসমান

183
ফ্রেগমেন্টের অনক্রিটে সেটঅ্যাসপশনস মেনু (সত্য) না বলে আমাকে এখন দু'বার পেয়েছে
জোশএন্ড্রিক

7
আমি আমার ক্রিয়াকলাপটি একটি খণ্ডে স্থানান্তর করছিলাম এবং এই সমস্যাটিতে ছড়িয়ে পড়ছি। পদ্ধতির স্বাক্ষরটি পাবলিক বুলিয়ান থেকে পাবলিক অকার্যকর হয়ে গেছে এবং যুক্তিগুলিও পরিবর্তিত হয়েছে। এই নোট নিতে ভুলবেন না!
you786

14
মনে রাখবেন ফ্রেগমেন্ট.অনক্রিয়েটঅপশনসমেনু (মেনু, মেনুআইনফ্লেটার) একটি খালি পদ্ধতি, সুতরাং সুপার কল করার কোনও প্রয়োজন নেই। এখানে কেবলমাত্র ভুলটি ছিল ভুল পদ্ধতির স্বাক্ষর এবং সম্ভবত একটি অনুপস্থিত সেট হ্যাসঅপশনস মেনু () অনক্রিট ()
-তে

6
Super.onCreateOptionsMenu কে inflater.inflate (R.menu.menu_custom, মেনু) দিয়ে প্রতিস্থাপন করুন;
কোড_অর্ম্প

197

আমারও একই সমস্যা ছিল, তবে আমি মনে করি এটির কাজটি চালানোর জন্য শেষ ধাপটি সংক্ষেপে এবং পরিচয় করিয়ে দেওয়া আরও ভাল:

  1. আপনার খন্ডের পদ্ধতিতে setHasOptionsMenu (সত্য) onCreate(Bundle savedInstanceState)পদ্ধতি যুক্ত করুন।

  2. ওভাররাইড onCreateOptionsMenu(Menu menu, MenuInflater inflater)(যদি আপনি আপনার ফ্রেগমেন্টের মেনুতে কিছু আলাদা করতে চান) এবং onOptionsItemSelected(MenuItem item)আপনার খণ্ডের পদ্ধতিগুলি Over

  3. আপনার onOptionsItemSelected(MenuItem item)ক্রিয়াকলাপের পদ্ধতির অভ্যন্তরে onOptionsItemSelected(MenuItem item)ফ্রেমমেন্টের পদ্ধতিতে মেনু আইটেম ক্রিয়াকলাপটি কার্যকর করা হবে কিনা তা নিশ্চিত করুন you

একটি উদাহরণ:

কার্যকলাপ

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        case R.id.activity_menu_item:

            // Do Activity menu item stuff here
            return true;

        case R.id.fragment_menu_item:

            // Not implemented here
            return false;
        default:
            break;
    }

    return false;
}

টুকরা

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
    ....
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    // Do something that differs the Activity's menu here
    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        case R.id.activity_menu_item:

            // Not implemented here
            return false;
        case R.id.fragment_menu_item:

            // Do Fragment menu item stuff here
            return true;

        default:
            break;
    }

    return false;
}

2
স্রেফ অনুপস্থিত ছিল setHasOptionsMenu(true);ধন্যবাদ
চাদ বিংহাম

1
কিছু ডিভাইসের একটি ভিউপাগারে আপনি খণ্ডে দ্বিতীয় বার যাওয়ার সময় মেনুটি কেবল দ্বিতীয় বার দেখাবে
রোয়েল

3
@ মার্কো এইচসি আপনার কোডটি ভাল কাজ করে। তবে আমি যদি কার্যকলাপের জন্য বা টুকরো জন্য কিছু মেনু আড়াল করতে চাই? কোন বিকল্প মেনুটি কার্যকর করতে হবে সে সম্পর্কে আপনার উল্লেখ রয়েছে (ক্রিয়াকলাপ এবং খণ্ডে)। তবে আমি যদি কিছু মেনু আড়াল করতে চাই?
শ্রেয়াশ মহাজন

@ আইড্রয়েডএক্সপ্লোরার কেবল সেই মেনু আইটেমের একটি উল্লেখ রেখে যান এবং অদৃশ্যতে দৃশ্যমানতা সেট করে। এটা কি আপনার প্রশ্ন?
মার্কো এইচসি

@ আইড্রয়েডএক্সপ্লোরার আমি তার কোডটি চেষ্টা করেছিলাম এবং আমি জানি না কীভাবে তবে আমি অন্য টুকরো টুকরো টুকরো করে সারণিতে স্বয়ংক্রিয়ভাবে মেনুটি আড়াল করি।
নূর আলী বাট

156

যদি আপনি আবিষ্কার করেন যে onCreateOptionsMenu(Menu menu, MenuInflater inflater)পদ্ধতিটি চালিত হচ্ছে না, নিশ্চিত করুন আপনি ফ্র্যাগমেন্টের onCreate(Bundle savedInstanceState)পদ্ধতি থেকে নিম্নলিখিতটি কল করেছেন :

setHasOptionsMenu(true)

এটি আমাকে নুলপয়েন্টার এক্সসেপশনের মতো ত্রুটি দেয়
প্রতীক

2
ভাল যুক্তি. আমি স্থিতিশীল নতুনIsstance পদ্ধতি থেকে setHasOptionMenu পদ্ধতি কল করছিলাম। যেহেতু আমি কেবল যখন আমার খণ্ডটি সংযুক্ত করেছিলাম যখন সেভডইনস্ট্যান্সস্টেটটি নাল ছিল, যখন স্ক্রিন কনফিগারেশন পরিবর্তন হয়েছিল মেনুটি তৈরি হবে না। খণ্ডের অনক্রিট পদ্ধতিটি সঠিক স্থান যেখানে সেটহ্যাসঅপশনমেনুকে সত্য হিসাবে সেট করা যায়।
আরগেনকিউই

1
আমি ব্যবহার করছি Toolbarএবং কল করতে হয়েছে setHasOptionsMenu(true)onCreateView()পরিবর্তে onCreate()এটি সম্পন্ন পেতে।
ক্লাব

60

আপনার যদি কোনও নির্দিষ্ট অভ্যন্তরে menuসতেজ করার জন্য একটি দরকার হয় তবে আপনি ব্যবহার করতে পারেন:webviewFragment

খণ্ড :

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    // TODO Add your menu entries here
    inflater.inflate(R.menu.menu, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.exit:
        System.exit(1);
        break;

    case R.id.refresh:
        webView.reload();
        break;
    }
    return true;

}

menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/exit" android:title="Exit" android:icon="@drawable/ic_action_cancel" />
    <item android:id="@+id/refresh" android:title="Refresh" android:icon="@drawable/ic_action_refresh" />
</menu>

31

টি এল; ডিআর

ব্যবহার করুন android.support.v7.widget.Toolbarএবং ঠিক করুন:

toolbar.inflateMenu(R.menu.my_menu)
toolbar.setOnMenuItemClickListener {
    onOptionsItemSelected(it)
}

স্বতন্ত্র সরঞ্জামদণ্ড

প্রস্তাবিত সমাধানগুলির মধ্যে setHasOptionsMenu(true)বেশিরভাগ কেবল তখনই কাজ করছে যখন পিতামাতার ক্রিয়াকলাপটির বিন্যাসে সরঞ্জামদণ্ড থাকে এবং এর মাধ্যমে এটি ঘোষণা করে setSupportActionBar()। তারপরে খণ্ডগুলি এই সঠিক অ্যাকশনবারের মেনু জনসংখ্যায় অংশ নিতে পারে :

ফ্রেগমেন্ট.অনক্রিয়েটঅপেশনস মেনু (): ফ্র্যাগমেন্ট হোস্টের স্ট্যান্ডার্ড অপশন মেনুটির সামগ্রী শুরু করুন Initial

আপনি যদি একটি নির্দিষ্ট টুকরাটির জন্য একটি স্বতন্ত্র সরঞ্জামদণ্ড এবং মেনু চান চান তবে নিম্নলিখিতগুলি করতে পারেন:

menu_custom_fragment.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/menu_save"
        android:title="SAVE" />
</menu>

custom_fragment.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    ...

CustomFragment.kt

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    val view = inflater.inflate(layout.custom_fragment, container, false)
    val toolbar = view.findViewById<Toolbar>(R.id.toolbar)
    toolbar.inflateMenu(R.menu.menu_custom_fragment)
    toolbar.setOnMenuItemClickListener {
        onOptionsItemSelected(it)
    }
    return view
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return when (item.itemId) {
        R.id.menu_save -> {
            // TODO: User clicked the save button
            true
        }
        else -> super.onOptionsItemSelected(item)
    }
}

হ্যাঁ, এটি এত সহজ। এমনকি আপনার ওভাররাইড করার প্রয়োজন নেই onCreate()বা onCreateOptionsMenu()

পিএস: এটি কেবলমাত্র সাথে কাজ করছে android.support.v4.app.Fragmentএবং android.support.v7.widget.Toolbar(এটিতেও আপনার ব্যবহার নিশ্চিত করুন AppCompatActivityএবং একটি AppCompatথিম styles.xml)।


1
সত্যিই আমাকে অনেক সাহায্য করেছে
ব্রাহ্মী অ্যাডিগোপুলা

23

মধ্যে menu.xml সব মেনু আইটেম যোগ করুন। তারপরে আপনি প্রাথমিক লোডের মধ্যে যে আইটেমগুলি দেখতে চান না তা আপনি লুকিয়ে রাখতে পারেন।

menu.xml

<item
    android:id="@+id/action_newItem"
    android:icon="@drawable/action_newItem"
    android:showAsAction="never"
    android:visible="false"
    android:title="@string/action_newItem"/>

যোগ setHasOptionsMenu(true)পদ্ধতি onCreate () আপনার অসম্পূর্ণ অংশ ক্লাসে মেনু আইটেম ডাকা।

FragmentClass.java

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

onCreateOptionsMenuআপনার আবার আপনার খণ্ড শ্রেণিতে ওভাররাইড করার দরকার নেই । খণ্ডে onPrepareOptionsMenuউপলব্ধ ওভাররাইড পদ্ধতিতে মেনু আইটেমগুলি পরিবর্তন (যুক্ত / অপসারণ) করা যেতে পারে ।

@Override
public void onPrepareOptionsMenu(Menu menu) {
    menu.findItem(R.id.action_newItem).setVisible(true);
    super.onPrepareOptionsMenu(menu);

}

16

মেনুগুলি স্ফীত করার আগে আপনাকে মেনু.ক্লায়ার () ব্যবহার করতে হবে।

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

এবং

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

1
এটি সঠিক যখন আপনি বিভিন্ন টুকরোতে বিভিন্ন মেনু চান এবং আপনি টুকরোগুলি প্রতিস্থাপনের পরিবর্তে যুক্ত করেন।
অক্ষয় মহাজন

ধন্যবাদ! menu.clear () আমাকে ক্রিয়াকলাপের মেনু বিকল্পটি সরাতে সহায়তা করে।
kimcy929

13

আমার ক্ষেত্রে, পদক্ষেপ এখানে।

ধাপ 1

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Here notify the fragment that it should participate in options menu handling.
    setHasOptionsMenu(true);
}

ধাপ ২

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    // First clear current all the menu items
    menu.clear();

    // Add the new menu items
    inflater.inflate(R.menu.post_stuff, menu);

    super.onCreateOptionsMenu(menu, inflater);
}

ধাপ 3

 @Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.post_stuff:
            Log.d(TAG, "Will post the photo to server");
            return true;
        case R.id.cancel_post:
            Log.d(TAG, "Will cancel post the photo");
            return true;
        default:
            break;
    }
    return super.onOptionsItemSelected(item);
}

menu.clear()পূর্ববর্তী মেনুটি সাফ করে আমি ইতিমধ্যে মূল ক্রিয়াকলাপে মেনু রেখেছি । আমার জন্য কাজ করেছেন :)
আনবসেলভেন রকি

8

আপনি যদি আপনার মেনু কাস্টম যুক্ত করতে চান

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

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

যদি কোনও ট্যাব ভিউ থাকে এবং আপনি প্রতিটি খণ্ডের জন্য বিভিন্ন মেনু স্ফীত করতে চান?
জৈনাম ঝভেরি

7

আমার একই সমস্যা হয়েছে, আমার টুকরোগুলি ভিউপ্যাজারের পৃষ্ঠা ছিল। এটি হওয়ার কারণটি হ'ল আমি ফ্রেগমেন্টপেজারএডাপ্টারটি ইনস্ট্যান্ট করার সময় ক্রিয়াকলাপ সমর্থন ফ্রেগমেন্ট ম্যানেজারের পরিবর্তে চাইল্ড ফ্রেগমেন্ট ম্যানেজার ব্যবহার করছিলাম।


3

মেনু ফাইল:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/play"
        android:titleCondensed="Speak"
        android:showAsAction="always"
        android:title="Speak"
        android:icon="@drawable/ic_play">
    </item>
    <item
        android:id="@+id/pause"
        android:titleCondensed="Stop"
        android:title="Stop"
        android:showAsAction="always"
        android:icon="@drawable/ic_pause">
    </item>
</menu>

ক্রিয়াকলাপ কোড:

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        case R.id.play:
            Toast.makeText(getApplicationContext(), "speaking....", Toast.LENGTH_LONG).show();
            return false;

        case R.id.pause:
            Toast.makeText(getApplicationContext(), "stopping....", Toast.LENGTH_LONG).show();
            return false;

        default:
            break;
    }

    return false;
}

টুকরা কোড:

@Override

public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        case R.id.play:
            text = page.getText().toString();
            speakOut(text);

            // Do Activity menu item stuff here
            return true;

        case R.id.pause:
            speakOf();

            // Not implemented here
            return true;

        default:
            break;
    }
    return false;
}

3

আপনার কোড ঠিক আছে। পদ্ধতিটিতে কেবল সুপার অনুপস্থিত ছিল:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    // TODO add your menu : 
    inflater.inflate(R.menu.my_menu, menu);
    //TODO call super
    super.onCreateOptionsMenu(menu, inflater);
}

2

আমি পাগল হয়ে যাচ্ছিলাম কারণ এখানকার কোনও উত্তরই আমার পক্ষে কাজ করে নি।

মেনুটি দেখাতে আমাকে ফোন করতে হয়েছিল: setSupportActionBar(toolbar)

সম্পন্ন!

দ্রষ্টব্য: যদি আপনার toolbarদৃষ্টিভঙ্গি একই ক্রিয়াকলাপের বিন্যাসে না থাকে আপনি উপরের কলটি সরাসরি আপনার ক্রিয়াকলাপ শ্রেণীর থেকে ব্যবহার করতে পারবেন না, এই ক্ষেত্রে আপনার ক্রিয়াকলাপটি আপনার খণ্ড শ্রেণীর থেকে নেওয়া এবং তারপরে কলটি করতে হবেsetSupportActionBar(toolbar) । মনে রাখবেন: আপনার ক্রিয়াকলাপ শ্রেণীর অ্যাপকম্প্যাটঅ্যাক্টিভিটি বাড়ানো উচিত।

আশা করি এই উত্তরটি আপনাকে সহায়তা করবে।


1

টুকরা ভিউ তৈরির পরে বিকল্প মেনু সেট করা আমার পক্ষে ভাল কাজ করেছে।

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    setHasOptionsMenu(true);        
}

1

আমার সমস্যা কিছুটা আলাদা ছিল। আমি সবকিছু ঠিকঠাক করেছি। তবে খণ্ডটি হোস্ট করার ক্রিয়াকলাপের জন্য আমি ভুল শ্রেণীর উত্তরাধিকার সূত্রে পেয়েছিলাম।

সুতরাং স্পষ্টভাবে, আপনি যদি খণ্ডটিতে ওভাররাইড onCreateOptionsMenu(Menu menu, MenuInflater inflater)করে চলেছেন তা নিশ্চিত করুন যে আপনার ক্রিয়াকলাপটি এই খণ্ডটির উত্তরাধিকারী hostsandroid.support.v7.app.ActionBarActivity (যদি আপনি এপিআই স্তরের ১১ এর নীচে সমর্থন করতে চান)।

আমি android.support.v4.app.FragmentActivity11 এর নীচে এপিআই স্তর সমর্থন করার জন্য উত্তরাধিকার সূত্রে পেয়েছি ।


1

আমি এটিতে একটি জিনিস যুক্ত করব এবং কারণ এটি আমার পক্ষে কাজ করছে না।

এটি নেপস্টার এর উত্তরের অনুরূপ।

  1. আপনার খণ্ডের হোস্টিং ক্রিয়াকলাপ প্রসারিত হয়েছে AppCompatActivityতা নিশ্চিত করুন FragmentActivity!

    public class MainActivity extends AppCompatActivity {
    
    }

    ফ্র্যাগমেন্টএটিভিটির জন্য গুগল রেফারেন্স ডকুমেন্টেশন থেকে:

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

  2. নেপস্টার এর উত্তর আপডেট করতে - ActionBarActivityএখন হ্রাস করা হচ্ছে, AppCompatActivityপরিবর্তে ব্যবহার করুন।

  3. ব্যবহার করার সময় AppCompatActivity, নিশ্চিত করে নিন যে আপনি "ক্রিয়াকলাপ থিম Theme.AppCompatবা অনুরূপ থিম" (গুগল ডক) সেট করেছেন।

দ্রষ্টব্য: শ্রেণীর android.support.v7.app.AppCompatActivityএকটি সাবক্লাস android.support.v4.app.FragmentActivity( অ্যাপকম্প্যাটঅ্যাক্টিভিটি রেফ ডক দেখুন)।


1

আপনার মেনু ফোল্ডারে একটি। مينু এক্সএমএল ফাইল তৈরি করুন এবং এই এক্সএমএল যুক্ত করুন

<item
    android:id="@+id/action_search"
    android:icon="@android:drawable/ic_menu_search"
    android:title="@string/action_search"
    app:actionViewClass="android.support.v7.widget.SearchView"
    app:showAsAction="always|collapseActionView" />

আপনার খণ্ড শ্রেণিতে এই পদ্ধতিটি ওভারাইড করুন

implement SearchView.OnQueryTextListener    in your fragment class



@Override
 public void onViewCreated(View view, Bundle savedInstanceState) {    
  super.onViewCreated(view, savedInstanceState);
  setHasOptionsMenu(true);

}

এখন খণ্ড ক্লাসে আপনার মেনু এক্সএমএল ফাইলটি সেটআপ করুন

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

    final MenuItem item = menu.findItem(R.id.action_search);
    final SearchView searchView = (SearchView)    
    MenuItemCompat.getActionView(item);


    MenuItemCompat.setOnActionExpandListener(item,
            new MenuItemCompat.OnActionExpandListener() {
                @Override
                public boolean onMenuItemActionCollapse(MenuItem item) {
                    // Do something when collapsed

                    return true; // Return true to collapse action view
                }

                @Override
                public boolean onMenuItemActionExpand(MenuItem item) {
                    // Do something when expanded
                    return true; // Return true to expand action view
                }
            });

}

0

উপরের সমস্তগুলি যদি কাজ করে না, আপনি ডিবাগ করে নিশ্চিত করুন ফাংশনটি তৈরি করতে হবে ক্রেইটঅ্যাপশনস মেনুকে ডেকে আনা হয়েছে (ডিবাগ রেখে বা লগ লিখে ...)

যদি এটি চালিত না হয়, তবে আপনার অ্যান্ড্রয়েড থিমটি অ্যাকশন বারকে সমর্থন করছে না। AndroidManLive.xML খুলুন এবং android:themeথিম সমর্থন অ্যাকশন বারের সাথে মান সেট করুন :

 <activity
     android:name=".MainActivity"
     android:label="@string/app_name"
     android:theme="@style/Theme.AppCompat">

0

আপনার এর উপর onCreate পদ্ধতি জুড়ুন setHasOptionMenu ()

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

তারপরে আপনার onCreateOptionsMenu ওভাররাইড করুন

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