খণ্ড থেকে কাস্টম অ্যাকশনবার শিরোনাম সেট করা হচ্ছে


90

আমার প্রধানত FragmentActivity, আমি আমার কাস্টম ActionBarশিরোনামটি এভাবে সেটআপ করি :

    LayoutInflater inflator = (LayoutInflater) this
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = inflator.inflate(R.layout.custom_titlebar, null);

    TextView tv = (TextView) v.findViewById(R.id.title);
    Typeface tf = Typeface.createFromAsset(this.getAssets(),
            "fonts/capsuula.ttf");
    tv.setTypeface(tf);
    tv.setText(this.getTitle());

    actionBar.setCustomView(v);

এটি নিখুঁত কাজ করে। যাইহোক, একবার আমি অন্য খুলি Fragments, আমি শিরোনাম পরিবর্তন করতে চান। আমি কীভাবে মেইনকে এটি করতে প্রবেশ করতে হবে তা নিশ্চিত নই Activity? অতীতে, আমি এটি করেছি:

((MainFragmentActivity) getActivity()).getSupportActionBar().setTitle(
            catTitle);

কেউ কি সঠিক পদ্ধতিতে পরামর্শ দিতে পারেন?

এক্সএমএল:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent" >

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="5dp"
        android:ellipsize="end"
        android:maxLines="1"
        android:text=""
        android:textColor="#fff"
        android:textSize="25sp" />

</RelativeLayout>

stackoverflow.com/a/28279341/1651286 এর স্কেলিবিলিটির কারণে গ্রহণযোগ্য উত্তর হওয়া উচিত। কারণ অন্যান্য সমস্ত পন্থা নির্দিষ্ট ক্রিয়াকলাপের সাথে টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো করে তোলে যা কোনও স্কেলযোগ্য ডিজাইন নয়, যদি একই অংশটি একাধিক ক্রিয়াকলাপের সাথে ব্যবহার করতে হয় তবে অ্যান্ড্রয়েড কাঠামোটিও এটির প্রস্তাব দেয়।
আখিল বাবা

উত্তর:


98

=== 30 অক্টোবর, 2019 === আপডেট করুন

যেহেতু আমাদের কাছে ভিউমোডেল এবং লাইভডেটার মতো নতুন উপাদান রয়েছে , তাই ভিউমোডেল এবং লাইভ ডেটা ব্যবহার করে খণ্ড থেকে ক্রিয়াকলাপের শিরোনাম আপডেট করার জন্য আমাদের একটি আলাদা / সহজ উপায় থাকতে পারে

ক্রিয়াকলাপ

class MainActivity : AppCompatActivity() {
private lateinit var viewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)
    if (savedInstanceState == null) {
        supportFragmentManager.beginTransaction()
            .replace(R.id.container, MainFragment.newInstance())
            .commitNow()
    }
    viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
    viewModel.title.observe(this, Observer {
        supportActionBar?.title = it
    })
} }

মেইনফ্রেগমেন্ট

class MainFragment : Fragment() {
companion object {
    fun newInstance() = MainFragment()
}
private lateinit var viewModel: MainViewModel
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View {
    return inflater.inflate(R.layout.main_fragment, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)
    activity?.run {
        viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
    } ?: throw Throwable("invalid activity")
    viewModel.updateActionBarTitle("Custom Title From Fragment")
} }

এবং মেইনমোডেলভিউ:

class MainViewModel : ViewModel() {
private val _title = MutableLiveData<String>()
val title: LiveData<String>
get() = _title
fun updateActionBarTitle(title: String) = _title.postValue(title) }

এবং তারপরে আপনি ফ্র্যাগমেন্ট ব্যবহার করে ক্রিয়াকলাপ শিরোনাম আপডেট করতে পারেন viewModel.updateActionBarTitle("Custom Title From Fragment")

=== এপ্রিল, 10, 2015 === আপডেট করুন

আপনার অ্যাকশন বারের শিরোনাম আপডেট করতে আপনার শ্রোতাদের ব্যবহার করা উচিত

টুকরা:

public class UpdateActionBarTitleFragment extends Fragment {
    private OnFragmentInteractionListener mListener;

    public UpdateActionBarTitleFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        if (mListener != null) {
            mListener.onFragmentInteraction("Custom Title");
        }
        return inflater.inflate(R.layout.fragment_update_action_bar_title2, container, false);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnFragmentInteractionListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    public interface OnFragmentInteractionListener {
        public void onFragmentInteraction(String title);
    }
}

এবং ক্রিয়াকলাপ:

public class UpdateActionBarTitleActivity extends ActionBarActivity implements UpdateActionBarTitleFragment.OnFragmentInteractionListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_update_action_bar_title);
    }

    @Override
    public void onFragmentInteraction(String title) {
        getSupportActionBar().setTitle(title);
    }
}

এখানে আরও পড়ুন: https://developer.android.com/training/basics/framents/communicating.html


4
এটা আমার জন্য কাজ! আমি সক্রিয়তার পরিবর্তে getActionBar ()। SetTitle (শিরোনাম) ব্যবহার করেছি। ধন্যবাদ
ভাগ্যবান 7676

4
ঠিক আমি যা খুঁজছিলাম তা আমার পক্ষে নির্বাচিত উত্তরের চেয়ে ভাল কাজ করেছে। ধন্যবাদ!
ডিস্ট্রউব

4
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত! এটি কীভাবে করা উচিত তা সঠিকভাবে দেখায়: যদি কোনও খণ্ডটি তার হোস্টিং ক্রিয়াকলাপের সাথে যোগাযোগ করতে চায় তবে যোগাযোগটি সর্বদা একটি ইন্টারফেসের মাধ্যমে হওয়া উচিত। খণ্ডটি ইন্টারফেস সরবরাহ করে এবং ক্রিয়াকলাপটি এটি প্রয়োগ করে! যদি একাধিক খণ্ডকে কোনও ক্রিয়াকলাপের সাথে একইভাবে যোগাযোগ করতে হয়, তবে একটি বিমূর্ত খণ্ড লিখুন যা ইন্টারফেসটি সরবরাহ করে এবং তারপরে প্রতিটি খণ্ডকে এই "বেস টুকরা" থেকে উত্তরাধিকার সূত্রে পেতে দিন।
উইঙ্কলারr

4
উপায় দ্বারা: এই উত্তরে ব্যবহৃত অ্যানটাচ (ক্রিয়াকলাপ) পদ্ধতিটি এই সময়ের মধ্যে অবনতি হয়েছে। onAttach(Context)উত্তীর্ণ হোস্ট ক্রিয়াকলাপটি প্রয়োজনীয় ইন্টারফেস প্রয়োগ করে (হোস্টের ক্রিয়াকলাপটি পুনরুদ্ধার করুন context.getActivity()) এর মাধ্যমে পদ্ধতিটির মধ্যে পরীক্ষা করুন ।
উইঙ্কলারr

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

150

আপনি যা করছেন তা সঠিক। এপিআইগুলিতে Fragmentsঅ্যাক্সেস নেই ActionBar, তাই আপনাকে কল করতে হবে getActivity। যদি না আপনার Fragmentস্থির অভ্যন্তর শ্রেণি WeakReferenceহয় তবে এক্ষেত্রে আপনার পিতামাতার কাছে একটি তৈরি করা উচিত এবং ক্রিয়াকলাপটি কল করা উচিত । getActionBarসেখান থেকে.

ActionBarকাস্টম বিন্যাস ব্যবহার করার সময় আপনার জন্য শিরোনাম সেট করতে আপনার Fragmentকল করতে হবে getActivity().setTitle(YOUR_TITLE)

আপনি কল setTitleকরার কারণ হ'ল আপনি getTitleনিজের শিরোনাম হিসাবে কল করছেন ActionBargetTitleযে জন্য শিরোনাম ফেরত Activity

আপনি কি কলটি পেতে না চান তাহলে getTitle, তারপর আপনি একটি সর্বজনীন পদ্ধতি তৈরি করতে হবে যে সেট আপনার লেখা TextViewমধ্যে Activityয়ে সর্বশক্তিমান Fragment

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

public void setActionBarTitle(String title){
    YOUR_CUSTOM_ACTION_BAR_TITLE.setText(title);
}

আপনার খণ্ডে :

((MainFragmentActivity) getActivity()).setActionBarTitle(YOUR_TITLE);

দস্তাবেজ:

Activity.getTitle

Activity.setTitle

এছাড়াও, আপনাকে this.whateverপ্রদত্ত কোডটিতে কল করার দরকার নেই , কেবল একটি টিপ।


আমি চেষ্টা করি এবং আমি এটি কাজ করতে পারি না। এর মূল্য কী, তার জন্য আমি আমার পোস্ট করেছি XMLএবং "এটি" সরিয়েছি। কোনও পরিবর্তন নেই ... এবং না, এটি কোনও staticঅভ্যন্তর শ্রেণি নয়।
দ্য লেলেটসমাস্টার

দাঁড়ান, কি কাজ করে না? আপনার ওপিতে আপনি কোনও কাজ না করার কথা উল্লেখ করেন না , আপনি কেবলমাত্র এ ActionBarথেকে শিরোনাম সেট করার জন্য "সঠিক" পদ্ধতিটি জানতে চাওয়ার উল্লেখ করেছেন Fragment। এছাড়াও, আমি this.whateverকোনও কিছুর সমাধান হিসাবে অপসারণের প্রস্তাব দিচ্ছিলাম না , এটি ছিল একটি কোড ফর্ম্যাটিং টিপ।
adneal

আমি মনে করি আপনি কী সমস্যায় পড়েছেন তা আমি বুঝতে পেরেছি এবং সেই অনুসারে আমার উত্তরটি সম্পাদনা করেছি।
adneal

থ্যাঙ্কএক্স নিখুঁত উত্তর
আম্মার আলি

@ কিকিংলিটস, আমি এটির কাজ না করা অবধি এই উত্তরটির সাথে লড়াই করছি (সে কারণেই আমি এটিকে উজ্জীবিত করেছি, পাশাপাশি আপনার প্রশ্ন): আমার নেভিগেশন-ড্রয়ারের মূল ক্রিয়াকলাপে ( menu_act) আমি বিশ্বব্যাপী "এমটাইটেল" তৈরি করেছি এবং একটি হিসাবে খণ্ড, প্রথমে আমি "mTitle" ( ( (menu_act) getActivity() ).mTitle = "new_title") তে একটি শিরোনাম বরাদ্দ করি এবং সাথে সাথে আমি তা করি ( (menu_act) getActivity() ).restoreActionBar();। "অ্যাকশনবার () এর ভিতরে" অ্যাকশনবার.সেটিটেল (এমটাইটেল) আছে ";"।
হোসে ম্যানুয়েল অ্যাবারকা রদ্রিগেজ

29

গুগলের উদাহরণগুলিতে এটি টুকরোগুলির মধ্যে ব্যবহার করার প্রবণতা রয়েছে।

private ActionBar getActionBar() {
    return ((ActionBarActivity) getActivity()).getSupportActionBar();
}

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

এখন, খণ্ডে আপনাকে যা করতে হবে তা হ'ল।

getActionBar().setTitle("Your Title");

আপনার খণ্ডগুলি সাধারণ খণ্ড শ্রেণীর পরিবর্তে উত্তরাধিকার সূত্রে উত্তম অংশ হলে এটি ভাল কাজ করে।

public abstract class BaseFragment extends Fragment {
    public ActionBar getActionBar() {
        return ((ActionBarActivity) getActivity()).getSupportActionBar();
    }
}

তারপরে আপনার খণ্ডে।

public class YourFragment extends BaseFragment {
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        getActionBar().setTitle("Your Title");
    }
}

ধন্যবাদ খুব সুন্দর সমাধান, আপনি নিজের ক্রিয়া বারেও কাস্টম ভিউটি পাস করতে পারেন।
আমির

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

8

দায়িত্ব স্তরের Activityএকটি Fragmentগণ্ডগোল থেকে শিরোনাম সেট করা। Fragmentএকটি মধ্যে অন্তর্ভুক্ত থাকে Activity, সুতরাং এটি Activity, Fragmentউদাহরণস্বরূপ এর ধরণ অনুসারে নিজস্ব শিরোনাম সেট করা উচিত ।

মনে করুন আপনার একটি ইন্টারফেস রয়েছে:

interface TopLevelFragment
{
    String getTitle();
}

Fragmentগুলি যা প্রভাবিত করতে পারে Activity'র শিরোনাম তারপর এই ইন্টারফেস বাস্তবায়ন। হোস্টিং ক্রিয়াকলাপের সময় আপনি লিখুন:

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

    FragmentManager fm = getFragmentManager();
    fm.beginTransaction().add(0, new LoginFragment(), "login").commit();
}

@Override
public void onAttachFragment(Fragment fragment)
{
    super.onAttachFragment(fragment);

    if (fragment instanceof TopLevelFragment)
        setTitle(((TopLevelFragment) fragment).getTitle());
}

এই পদ্ধতিতে Activityসর্বদা নিয়ন্ত্রণ করা হয় কোন শিরোনামটি ব্যবহার করা উচিত, এমনকি যদি বেশ কয়েকটি TopLevelFragmentগুলি সংযুক্ত করা হয়, যা কোনও ট্যাবলেটে যথেষ্ট সম্ভব।


6

আমি মনে করি না যে গৃহীত উত্তর এটির জন্য একটি সঠিক উত্তর। যেহেতু সমস্ত কার্যক্রম যা ব্যবহার করে

সরঞ্জামদণ্ড

ব্যবহার প্রসারিত হয়

অ্যাপকম্প্যাটঅ্যাক্টিভিটি

, এটি থেকে কল করা টুকরো টাইটেল পরিবর্তনের জন্য নীচে উল্লিখিত কোডটি ব্যবহার করতে পারে।

((AppCompatActivity) context).getSupportActionBar().setTitle("Your Title");

5

খণ্ডে আমরা এটি ব্যবহার করতে পারি, এটি আমার পক্ষে ভাল কাজ করছে।

getActivity().getActionBar().setTitle("YOUR TITLE");

যখন আমাদের ক্রিয়াকলাপের সরঞ্জামদণ্ডে এমন একটি পাঠ্য ভিউ থাকে যা শিরোনামটির ভূমিকা রাখে
সিমোন

4

যদি যদি আপনি কোড সমস্যা হচ্ছে, নির্বাণ চেষ্টা getSupportActionBar().setTitle(title)ভিতরে onResume()পরিবর্তে আপনার টুকরা এর onCreateView(...)অর্থাত

ইন MainActivity.java :

public void setActionBarTitle(String title) {
    getSupportActionBar().setTitle(title);
}

খণ্ডে:

 @Override
 public void onResume(){
     super.onResume();
     ((MainActivity) getActivity()).setActionBarTitle("Your Title");
 }

এটি আমার সমস্যা ছিল - যেখানে আমি শিরোনামটি সেট করছিলাম। তবে ((MainActivity) getActivity()).setTitle("title")পর্যাপ্ত কোটলিনে, আমার টুকরাটি করে activity!!.title = "title
জো ল্যাপ

2

নিম্নলিখিত ব্যবহার:

getActivity().setTitle("YOUR_TITLE");

এই উত্তরটি ক্রিয়াকলাপের শিরোনাম পরিবর্তন করা, প্রশ্নটি পরিবর্তে অ্যাকশনবারের শিরোনাম সম্পর্কে।
ডেভিড ডি সি ই

ধন্যবাদ @ আনিসেটি! আমি ফ্রেগমেন্ট ক্লাসে এটিই করেছি।
ফ্রান্সিস রডরিগস

2

ন্যাভিগেশনড্রওয়ার ব্যবহার করার সময় টুকরোগুলি থেকে অ্যাকশনবার শিরোনাম সেট করার জন্য আমার সমাধানটি এখানে। এই সমাধানটি একটি ইন্টারফেস ব্যবহার করে যাতে খণ্ডগুলি সরাসরি পিতামাতার ক্রিয়াকলাপটি উল্লেখ করার প্রয়োজন হয় না:

1) একটি ইন্টারফেস তৈরি করুন:

public interface ActionBarTitleSetter {
    public void setTitle(String title); 
}

2) ফ্রেগমেন্টের অনাটাচে , ইন্টারফেস প্রকারে ক্রিয়াকলাপটি কাস্ট করুন এবং সেটএকটিভিটি টাইটেল পদ্ধতিটিতে কল করুন:

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity);
    ((ActionBarTitleSetter) activity).setTitle(getString(R.string.title_bubbles_map)); 
}

3) ক্রিয়াকলাপে, অ্যাকশনবার্টিটেলসেটর ইন্টারফেসটি প্রয়োগ করুন :

@Override 
public void setTitle(String title) { 
    mTitle = title; 
}

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত কারণ অন্য সমস্ত পদ্ধতির নির্দিষ্ট ক্রিয়াকলাপের সাথে আবদ্ধ অংশ তৈরি করা হচ্ছে, যা কোনও স্কেলযোগ্য ডিজাইন নয়, এন্ড্রয়েড কাঠামোটিও এটিই সুপারিশ করে
আখিল বাবা

2

পরিবর্তন শিরোনাম জন্য সেরা ইভেন্ট onCreateOptionsMenu

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.general, container,  
    setHasOptionsMenu(true); // <-Add this line
    return view;
}

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

    // If use specific menu
    menu.clear();
    inflater.inflate(R.menu.path_list_menu, menu);
    // If use specific menu

    ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Your Fragment");
    super.onCreateOptionsMenu(menu, inflater);
}

2

একটি সহজ কোটলিন উদাহরণ

এই গ্রেড ডিপগুলি মিলছে বা আপনার প্রকল্পের উচ্চতর সংস্করণ হিসাবে ধরে নেওয়া হচ্ছে:

kotlin_version = '1.3.41'
nav_version_ktx = '2.0.0'

এটি আপনার খণ্ড ক্লাসে অভিযোজিত করুন:

    /**
     * A simple [Fragment] subclass.
     *
     * Updates the action bar title when onResume() is called on the fragment,
     * which is called every time you navigate to the fragment
     *
     */

    class MyFragment : Fragment() {
    private lateinit var mainActivity: MainActivity

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

       //[...]

        mainActivity = this.activity as MainActivity

       //[...]
    }

    override fun onResume() {
        super.onResume()
        mainActivity.supportActionBar?.title = "My Fragment!"
    }


    }

1

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

@Override
     public void onBackPressed() {

    int T=getSupportFragmentManager().getBackStackEntryCount();
    if(T==1) { finish();}

    if(T>1) {
        int tr = Integer.parseInt(getSupportFragmentManager().getBackStackEntryAt(T-2).getName());
        setTitle(navMenuTitles[tr]);  super.onBackPressed();
      }

}

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

    fragmentManager.beginTransaction().
replace(R.id.frame_container, fragment).addToBackStack(position).commit();

এখন, নাভেনুউইন শিরোনাম এমন একটি জিনিস যা আপনি অনক্রিটটিতে লোড করেন

 // load slide menu items
        navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);

অ্যারে এক্সএমএল স্ট্রিং.এক্সএমএলে একটি অ্যারে টাইপ স্ট্রিং রিসোর্স

 <!-- Nav Drawer Menu Items -->
    <string-array name="nav_drawer_items">
        <item>Title one</item>
        <item>Title Two</item>
    </string-array>

1

আপনার উত্তরটি স্ট্রিং [] অবজেক্টে সংরক্ষণ করুন এবং এটি মেইনএকটিভিটিতে অনট্যাব চেঞ্জ () নীচে www.w হিসাবে সেট করুন

String[] object = {"Fragment1","Fragment2","Fragment3"};

public void OnTabChange(String tabId)
{
int pos =mTabHost.getCurrentTab();     //To get tab position
 actionbar.setTitle(object.get(pos));
}


//Setting in View Pager
public void onPageSelected(int arg0) {
    mTabHost.setCurrentTab(arg0);
actionbar.setTitle(object.get(pos));
}

1

আপনার মত castালাইয়ের পদ্ধতির ক্ষতি side

((MainFragmentActivity) getActivity()).getSupportActionBar().setTitle(
        catTitle);

আপনার খণ্ডটি মেইনএকটিভিটির ফ্রেমের বাইরে আর পুনরায় ব্যবহারযোগ্য নয় able আপনি যদি এই ক্রিয়াকলাপের বাইরে এটি ব্যবহার করার পরিকল্পনা না করেন তবে সমস্যা নেই। আরও ভাল পদ্ধতির কার্যকলাপের উপর নির্ভর করে শর্তাধীন শিরোনাম সেট করা হবে। সুতরাং আপনার খণ্ডের ভিতরে আপনি লিখবেন:

if (getActivity() instanceof ActionBarActivity) {
    ((ActionBarActivity) getActivity()).getSupportActionBar().setTitle("Some Title");
}

1

আপনি যদি অ্যান্ড্রয়েড স্টুডিও ১.৪ স্থির টেম্পলেটটি গুগল দ্বারা সরবরাহ করেন তবে সাধারণের চেয়ে আপনাকে নিম্নলিখিত কোডটি onNavigationItemSelectedমেথোডে লিখতে হত যেখানে আপনার সম্পর্কিত টুকরাটি যদি শর্তে কল করে।

 setTitle("YOUR FRAGMENT TITLE");

আপনি যদি ক্রিয়াকলাপ থেকে সরাসরি শিরোনামে অ্যাক্সেস পান তবে এটি দুর্দান্ত ... তবে শিরোনামটি যদি
খণ্ডটিতে

1

আমি কোনও মাথাব্যথা ছাড়াই খণ্ডে বা কোনও ক্রিয়াকলাপে অ্যাকশনবার শিরোনাম সেট করার একটি খুব সহজ সমাধান পাচ্ছি।

কেবলমাত্র নীচের মতো xML সংশোধন করুন যেখানে সরঞ্জামদণ্ড সংজ্ঞায়িত করা হয়েছে:

<android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@color/colorPrimaryDark"
            app:popupTheme="@style/AppTheme.PopupOverlay" >

            <TextView
                style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
                android:id="@+id/toolbar_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/app_name"
                />
            </android.support.v7.widget.Toolbar>

    </android.support.design.widget.AppBarLayout> 

1) আপনি যদি অ্যাকশনবারটি কোনও খণ্ডে সেট করতে চান তবে:

Toolbar toolbar = findViewById(R.id.toolbar);
TextView toolbarTitle = (TextView) toolbar.findViewById(R.id.toolbar_title);

এটি যে কোনও জায়গা থেকে ব্যবহার করার জন্য, আপনি ক্রিয়াকলাপে কোনও পদ্ধতি নির্ধারণ করতে পারেন

public void setActionBarTitle(String title) {
        toolbarTitle.setText(title);
    }

ক্রিয়াকলাপে এই পদ্ধতিটি কল করতে, কেবল এটি কল করুন।

setActionBarTitle("Your Title")

ক্রিয়াকলাপের খণ্ডন থেকে এই পদ্ধতিটি কল করতে, কেবল এটি কল করুন।

((MyActivity)getActivity()).setActionBarTitle("Your Title");

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

0

কেবলমাত্র নির্বাচিত উত্তরের সাথে যুক্ত করতে, আপনি নিজের মূল ক্রিয়াকলাপে একটি দ্বিতীয় পদ্ধতিও যুক্ত করতে চাইতে পারেন। সুতরাং আপনি আপনার মূল ক্রিয়াকলাপে নিম্নলিখিত পদ্ধতিগুলি সহ শেষ করবেন:

public void setActionBarTitle(String title) {
    getSupportActionBar().setTitle(title);
}

public void setActionBarTitle(int resourceId) {
    setActionBarTitle(getResources().getString(resourceId);
}

এটি আপনাকে স্ট্রিং ভেরিয়েবল উভয় R.id.this_is_a_stringথেকে আপনার স্ট্রিং.এক্সএমএল ফাইলের মতো কোনও সংস্থান আইডি থেকে শিরোনাম সেট করতে দেয় । এটি কীভাবে getSupportActionBar().setTitle()কাজ করে তার থেকে আরও কিছুটা কাজ করবে যেহেতু এটি আপনাকে কোনও সংস্থান আইডিতে পাস করার অনুমতি দেয়।


0

উপরে বর্ণিত হিসাবে অনেকগুলি উপায় রয়েছে। তুমিও এটা করতে পারেন onNavigationDrawerSelected()আপনারDrawerActivity

public void setTitle(final String title){
    ((TextView)findViewById(R.id.toolbar_title)).setText(title);
}

@Override
public void onNavigationDrawerItemSelected(int position) {
    // update the main content by replacing fragments
    fragment = null;
    String title = null;
    switch(position){

    case 0:
        fragment = new HomeFragment();
        title = "Home";
        break;
    case 1:
        fragment = new ProfileFragment();
        title = ("Find Work");
        break;
    ...
    }
    if (fragment != null){

        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager
        .beginTransaction()
        .replace(R.id.container,
                fragment).commit();

        //The key is this line
        if (title != null && findViewById(R.id.toolbar_title)!= null ) setTitle(title);
    }
}

0

কমপক্ষে আমার জন্য, রানটাইমে একটি ট্যাব শিরোনাম পরিবর্তন করার জন্য একটি সহজ উত্তর ছিল (চারপাশে খননের পরে):

ট্যাবলআউট ট্যাবলায়আউট = (ট্যাবলআউট) ফাইন্ড ভিউবাইআইডি (আর.আইডি.ট্যাবস); tabLayout.getTabAt (MyTabPos) .setText ("আমার নতুন পাঠ্য");


0

আপনি যদি ViewPager(আমার ক্ষেত্রে মত) ব্যবহার করেন তবে আপনি এটি ব্যবহার করতে পারেন:

getSupportActionBar().setTitle(YOURE_TAB_BAR.getTabAt(position).getText());

মধ্যে onPageSelectedপদ্ধতি আপনারVIEW_PAGER.addOnPageChangeListener


0

আপনার মেইনএ্যাকটিভিটিতে under onCreate:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

এবং আপনার খণ্ডের ক্রিয়াকলাপের নীচে onResume:

getActivity().setTitle(R.string.app_name_science);

Alচ্ছিক: - যদি তারা নাল রেফারেন্সের সতর্কতা দেখায়

Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);


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