কিভাবে টুকরা টুকরো টুকরো থেকে?


107

অ্যাকশনবার হিসাবে আমার ActionBarActivityসাথে NavigationDrawerসমর্থন_ভি 7 রয়েছে এবং আমি ব্যবহার করি Toolbar। আমার এক খণ্ডে টুলবারে কাস্টম ভিউ রয়েছে। অন্যান্য খণ্ডে Toolbarশিরোনাম প্রদর্শন করা উচিত।

Toolbarখণ্ডগুলি থেকে কাস্টমাইজ করার উদাহরণ কীভাবে পাওয়া যায়? আমি সাথে অ্যাকশনবার পেতে পারি getActivity().getActionBar(), তবে আমি যদি setTitle()এই দৃষ্টান্তটি অ্যাকশনবারের জন্য কল করি তবে এটি কিছুই করে না।

UPD:

আমার ক্ষেত্রে

((ActionBarActivity) getActivity()).getSupportActionBar().setTitle();

(মিস্টার ইঞ্জিনিয়ার 13 বলেছে) প্রথম খণ্ড তৈরিতে কাজ করবেন না কারণ আমি এটিকে হিডেনচ্যাঞ্জড () থেকে কল করি। এখন আমি অনক্রিটভিউতে আরও একটি যুক্ত করব () এবং এটি দুর্দান্ত কাজ করে।


টুকরোগুলিতে অ্যাকশনবার / সরঞ্জামবারের ক্রিয়াকলাপ নেই
tyczj

(MainAcivity) this.getActivity ()) getToolbar ()। সঠিক উত্তর হবে !! টুকরো টুকরো টুকরো পাওয়ার জন্য !!
LOG_TAG

উত্তর:


201

getActivity()আপনাকে AppCompatActivityপ্রথমে আপনার ক্রিয়াকলাপটি কাস্ট করতে হবে । এখানে একটি উদাহরণ:

((AppCompatActivity) getActivity()).getSupportActionBar().setTitle();

কারণ আপনি এটি নিক্ষেপ করতে হয় কারণ getActivity()একটি ফিরে আসে FragmentActivityএবং আপনি একটি প্রয়োজনAppCompatActivity

কোটলিনে:

(activity as AppCompatActivity).supportActionBar?.title = "My Title"

8
'সাপোর্টঅ্যাকশনবার' এবং 'টুলবার' পাওয়া একই জিনিস?
দর্পণ

@ ডারপান নিশ্চিত নয়
কনস্টান্টিন কনোপকো

যদি আমি এটি যুক্ত করি, এটির শিরোনাম পরিবর্তন হচ্ছে .. তবে আমি যদি পিতামাতার ক্রিয়ায় ফিরে যাই তবে কীভাবে আবার শিরোনাম পরিবর্তন করব? মানে আমার কাছে নেভ ড্রয়ার রয়েছে। সাইড ড্রয়ারের কয়েকটি টুকরো রয়েছে এবং মূল ক্রিয়াকলাপটির নিজস্ব শিরোনাম রয়েছে। যখন আমি প্রধান ক্রিয়াকলাপের শিরোনাম সেট করি, এটি কাজ করে এবং খণ্ডে, আপনি যেভাবে উল্লেখ করেছেন সেভাবে কাজ করে। তবে কীভাবে ফিরে যাওয়ার ক্রিয়াকলাপটির শিরোনামটি পরিবর্তন করব?
কিলো রেন

82

যদি টুকরাগুলিতে টুলবারের কাস্টম ভিউ হওয়া উচিত তবে আপনি প্রতিটি খণ্ডের জন্য আলাদাভাবে আলাদাভাবে সরঞ্জামদণ্ড প্রয়োগ করতে পারেন।

টুলবারটি টুকরো টুকরোতে যোগ করুন:

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimaryDark"/>

খণ্ডে এটি সন্ধান করুন:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment, container, false);
        Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);

        //set toolbar appearance
        toolbar.setBackground(R.color.material_blue_grey_800);

        //for crate home button
        AppCompatActivity activity = (AppCompatActivity) getActivity();
        activity.setSupportActionBar(toolbar);
        activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

মেনু শ্রোতা দুটি উপায়ে তৈরি করা যেতে পারে: ওপশনগুলিকে ওভাররাইড করুন আইটেমগুলি আপনার খণ্ডে নির্বাচিত:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()){
        case android.R.id.home:
            getActivity().onBackPressed();
    }
    return super.onOptionsItemSelected(item);
}

অথবা টুলবারের জন্য শ্রোতাকে অনক্রিটভিউতে তৈরি করার সময় সেট করুন:

toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                return false;
            }
        });

1
আমি ঠিক এটি করার সঠিক উপায়টি নিশ্চিত করতে চাই? যদি আমরা ভিউপ্যাজার + ট্যাবলআউট বা পেজর্টাবস্ট্রাইপে টুলবারের সাথে বিভিন্ন টুকরো লোড করি তবে এটি সোয়াইপ করার সময় অ্যাপ্লিকেশনটির কার্যকারিতা প্রভাবিত করবে?
LOG_TAG

1
@ লৌগ_এটিএজি আমার প্রতিটি খণ্ডটি সরঞ্জামদণ্ডটি বাস্তবায়নের সাথে একটি ড্রয়ার ডিজাইন রয়েছে (এবং এটির লেআউট ফাইলটিতে একটি সরঞ্জামদণ্ড রয়েছে) এবং উপরের কোডটি আমার পক্ষে দুর্দান্ত কাজ করেছে।
ম্যাটবুথডেভ

ধন্যবাদ! হায়ুলের মতো কাজ করেছেন !! :) বিটিডব্লিউ, onOptionsItemSelected()কোড পুনরাবৃত্তি এড়াতে ফ্রেগমেন্টের পরিবর্তে পিতামাতার ক্রিয়াকলাপকে ওভাররাইড করা ভাল ।
আদিত্য নাইক

@ চ্যাডএমএক্স নং, কেন তিনি এক্সএমএল ইত্যাদিতেও সরঞ্জামদণ্ড যোগ করার বিষয়ে লিখেছিলেন। লেখক কীভাবে টুকরাটি থেকে প্রোগ্রামবারিকভাবে সরঞ্জামদণ্ড পাবেন asked সুতরাং stackoverflow.com/a/26998718/4548520 এই শ্রেষ্ঠ / সঠিক উত্তর এবং এটি ছোট
user25

43

খণ্ডে সরঞ্জামদণ্ডটি পেতে আপনার দুটি পছন্দ আছে

প্রথমটি

Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);

এবং দ্বিতীয় এক

Toolbar toolbar = ((MainActivity) getActivity()).mToolbar;

তবে এটি কি সঠিক উপায় .. বেকোজ আমাদের সাপোর্টপোর্ট অ্যাকশনবারটিও পেয়েছে?
কোড_লাইফ

9
toolbar = (Toolbar) getView().findViewById(R.id.toolbar);
AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.setSupportActionBar(toolbar);

2

কোটলিন ব্যবহারকারীদের জন্য (activity as AppCompatActivity).supportActionBar?.show()


!!এটি সম্পূর্ণরূপে এড়ানো যায় ?এবং এটি আপনাকে একটি সম্ভাব্য ক্র্যাশ বাঁচাতে পারে
জোনজারেট

আমি বিশ্বাস করি এটি আরও ভাল(activity as? AppCompatActivity)?.supportActionBar?.show()
জোনজারেট

1

আপনি getActivity().getSupportActionBar().setTitle()যদি সমর্থন_ভি 7 ব্যবহার করছেন তবে আপনাকে চেষ্টা করতে হবে।


1

আপনার টুকরা থেকে: ( টুকরা থেকে সরঞ্জামদণ্ড পাবেন?)

// get toolbar
((MainAcivity)this.getActivity()).getToolbar();  // getToolbar will be method in Activity that returns Toolbar!!  don't use getSupportActionBar for getting toolbar!!
// get action bar
this.getActivity().getSupportActionBar();

আপনি যখন সরঞ্জামদণ্ডে স্পিনার ব্যবহার করছেন এবং কোনও স্প্যাগমেন্ট থেকে স্পিনার বা সরঞ্জামদণ্ডে কাস্টম ভিউগুলি কল করবেন এটি খুব সহায়ক is

আপনার ক্রিয়াকলাপ থেকে:

// get toolbar
this.getToolbar();
// get Action Bar
this.getSupportActionBar();

3
আপনার ক্রিয়াকলাপটিতে গেটটুলবার () নামে একটি পদ্ধতি থাকতে হবে যা খারাপ, কারণ কার্যকলাপ এবং খণ্ডের মধ্যে যোগাযোগ কীভাবে করা উচিত তা তা নয়।
মার্কো

2
হ্যাঁ এর জন্য আর কোন উপায় নেই !! নেভিগেশন ড্রয়ারের অনেকগুলিই কেবল এই স্টাইলটি প্রয়োগ করে !!! অ্যাপকোম্প্যাটএটিভিটি (অ্যাপকম্প্যাটএকটিভিটি) getActivity () এর কারণে আমাদের কিছু সময় ক্রিয়াকলাপটি কাস্ট করা প্রয়োজন যা এটি অন্য একটি ব্যথার বিষয় !!! এই সমস্ত
স্টাফ

1

এক্সএমএলে

 <androidx.appcompat.widget.Toolbar
  android:id="@+id/main_toolbar"
  android:layout_width="match_parent"
  android:layout_height="?attr/actionBarSize"
  app:layout_scrollFlags="scroll|enterAlways">
 </androidx.appcompat.widget.Toolbar>

কোটলিন: ফ্রেগমেন্ট.কেটি -> অনক্রিটভিউতে ()

setHasOptionsMenu(true)

val toolbar = view.findViewById<Toolbar>(R.id.main_toolbar)

(activity as? AppCompatActivity)?.setSupportActionBar(toolbar)

(activity as? AppCompatActivity)?.supportActionBar?.show()

-> onCreateOptionsMenu ()

   override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
       inflater.inflate(R.menu.app_main_menu,menu)
       super.onCreateOptionsMenu(menu, inflater)
   }

-> onOptionsItemSelected ()

   override fun onOptionsItemSelected(item: MenuItem): Boolean {
        return when (item.itemId) {
             R.id.selected_id->{//to_do}
             else -> super.onOptionsItemSelected(item)
        }
    }

0

আমি এই পদক্ষেপগুলি ব্যবহার করে এটি করেছি।

  1. onCreateViewমূল টুকরাটির নীচে কোড ব্যবহার করে শিরোনাম সেট করুন ।
((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Your title");
  1. খণ্ডগুলির মধ্যে অদলবদল করার জন্য আমি নীচের নেভিগেশন বারটি ব্যবহার করছি যা MainActivityখণ্ডটির (মূল কার্যকলাপ) প্রয়োগ করা হয় । এমনকি যদি আপনি কোনও বোতাম বা মেনু আইটেম ব্যবহার করেন তবে আপনি শিরোনামটি onSelectedItemClickListenerঠিক একইভাবে পরিবর্তন করতে পারবেন ঠিক যেমন আমি আমার ক্ষেত্রে করেছি did
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
        switch (menuItem.getItemId()){
            case R.id.menu_dashboard:
                getSupportActionBar().setTitle("Dashboard");
                fm.beginTransaction().hide(active).show(dashboardFragment).commit();
                active = dashboardFragment;
                return true;
            case R.id.menu_workshop:
                getSupportActionBar().setTitle("Workshops");
                fm.beginTransaction().hide(active).show(workshopFragment).commit();
                active = workshopFragment;
                return true;
         }
         return false;
    }

0

যদি আপনি কাস্টম টুলবার বা অ্যাকশনবার ব্যবহার করে থাকেন এবং আপনি খণ্ডগুলি থেকে আপনার সরঞ্জামদণ্ড / অ্যাকশন বারের রেফারেন্স পেতে চান তবে আপনাকে প্রথমে নীচের মতো ফ্রেগমেন্টের অনক্রিটভিউ পদ্ধতি থেকে আপনার মূল ক্রিয়াকলাপের উদাহরণ পাওয়া উচিত ।

MainActivity activity = (MainActivity) getActivity();

তারপরে নীচের মতো আরও বাস্তবায়নের জন্য ক্রিয়াকলাপটি ব্যবহার করুন

ImageView vRightBtn = activity.toolbar.findViewById(R.id.toolbar_right_btn);

এটি কল করার আগে আপনাকে নীচের মত আপনার মেইনএকটিভিটিতে আপনার কাস্টম সরঞ্জামদণ্ডটি আরম্ভ করতে হবে।

প্রথম সেটটি আপনার সরঞ্জামদণ্ডের সর্বজনীন পছন্দ পছন্দ করে

public Toolbar toolbar;
public ActionBar actionBar;

এবং onCreate () পদ্ধতিতে কাস্টম টুলবার আইডি নির্ধারণ করুন

toolbar = findViewById(R.id.custom_toolbar);
setSupportActionBar(toolbar);
actionBar = getSupportActionBar();

এটাই. এটি ফ্র্যাগমেন্টে কাজ করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.