设置工具栏标题

时间:2015-03-10 00:54:27

标签: android android-fragments android-toolbar

我正在尝试设置我的工具栏标题:

public class StatisticsPage extends Fragment  {

    public StatisticsPage(){}
    private FragmentTabHost mTabHost;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.statistics_pagelayout, container, false);

        Spinner spinner = (Spinner) rootView.findViewById(R.id.statsSpin);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(),
                R.array.statspage, R.layout.dropdown_item);
        spinner.setAdapter(adapter);
        getSupportActionBar().setTitle("My title");

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {

                switch (position) {
                    case 0:
                        break;
                    case 1:
                        // do whatever stuff you wanna do here
                        Fragment Fragment_one;
                        FragmentManager man= getActivity().getSupportFragmentManager();
                        FragmentTransaction tran = man.beginTransaction();
                        Fragment_one = new BreweryStatistics();
                        tran.replace(R.id.main, Fragment_one);//tran.
                        tran.addToBackStack(null);
                        tran.commit();
                        break;
                    case 2:
                        Fragment Fragment_two;
                        FragmentManager mantwo= getActivity().getSupportFragmentManager();
                        FragmentTransaction trantwo = mantwo.beginTransaction();
                        Fragment_two = new StyleStatistics();
                        trantwo.replace(R.id.main, Fragment_two);//tran.
                        trantwo.addToBackStack(null);
                        trantwo.commit();
                        break;
                    case 3:
                        Fragment Fragment_three;
                        FragmentManager manthree= getActivity().getSupportFragmentManager();
                        FragmentTransaction tranthree = manthree.beginTransaction();
                        Fragment_three = new TasteStatisticsPage();
                        tranthree.replace(R.id.main, Fragment_three);//tran.
                        tranthree.addToBackStack(null);
                        tranthree.commit();
                        break;
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parentView) {
                // your code here
            }
        });

        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
        String userName = prefs.getString("userName", null);
        String userID = prefs.getString("userID", null);
        String url = "myURL";
        String userURLComp = "u=" + userID;

        url = url + userURLComp ;

        new getBasicStats(getActivity()).execute(url);

        return rootView;
    }
}

基本上上面代码中的这一行在片段中不起作用:

getSupportActionBar().setTitle("My title");

另外,如何阻止我的应用标题显示在应用栏中?我还想在设置它时将标题设为白色。

7 个答案:

答案 0 :(得分:59)

将其更改为

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

您需要告诉活动它是AppCompatActivity

然后您使用getActivity()来获取主要活动,因为您处于片段中。

然后像往常一样设置标题。

答案 1 :(得分:4)

在科特林

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

Edit:添加了空安全操作符?,以避免在ActionBar不可用的情况下使用NullPointer

答案 2 :(得分:3)

实际上您可以执行以下操作:

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

    getActivity().setTitle("My title");
}

我在onActivityCreated进行了更改,因为活动可能尚未在onCreateView中完全初始化。在onActivityCreated中,不存在获得NullPointerException的风险。

注意:我使用的AppCompatActivityToolbar和v4 Fragments相关联。

答案 3 :(得分:1)

执行此操作的最佳和最简单方法是转到Android Manifest并更改label部分中的Activity。这是负责在工具栏上标记活动的内容。这样可以节省您在类文件中编写代码行。

答案 4 :(得分:1)

科特琳根据资源设置标题

活动:

setTitle(R.string.some_title)

片段:

activity?.setTitle(R.string.some_title)

答案 5 :(得分:0)

在科特林:

采用onCreate方法放置title = "Some Text Here"

答案 6 :(得分:-1)

这对我来说是一项活动。我没有在片段内尝试过它。

this.setTitle("welcome")
ActiviryName.this.setTitle("welcome");