设置工具栏标题。

17

我想这样设置我的工具栏标题:

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");

我该如何停止应用程序标题出现在应用栏中?我还想将标题设置为白色,该怎么办?


尝试在 getSupportFragment 前添加 getActivity()。 - Tristan Wiley
仍然显示无法解决方法getsuuportactionbar。 - Mike
怎么样?((ActionBarActivity)getActivity()).getSupportActionBar().setTitle("主页"); - Tristan Wiley
运行得非常完美,我能以某种方式将其主题设置为白色吗? - Mike
1
我会为此提出一个单独的问题。我将回答这个问题,而不是评论。 - Tristan Wiley
7个回答

70

将其更改为

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

你需要告诉活动它是一个AppCompatActivity

然后你使用getActivity()来获取主活动,因为你在一个片段中。

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


如果你知道如何更改颜色,我也刚刚发布了那个问题。 - Mike
1
虽然这个答案可能是正确和有用的,但最好您还可以加入一些解释来说明它如何解决问题。这在未来会变得特别有用,如果发生某些更改(可能不相关),导致它停止工作,用户需要了解它过去是如何工作的。 - Kevin Brown-Silva
抱歉,Kevin。我会添加更多内容的。我应该知道的。 - Tristan Wiley
有没有一种在异步任务中完成这个操作的方法? - Mike
1
最简单和最简单的答案 - Vivek Mishra
谢谢,非常简单的方式 - Jeekiran

11

在Kotlin中

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

编辑:添加了空安全运算符?,以避免在操作栏不可用的情况下出现NullPointer


3

实际上,您只需执行以下操作:

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

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

我在onActivityCreated中进行了更改,因为在onCreateView中Activity可能还没有完全初始化。在onActivityCreated中不会出现获取NullPointerException的风险。

注意:我正在使用一个与之关联的Toolbar和v4 FragmentsAppCompatActivity


onActivityCreated 方法在哪里?在主活动中还是片段中?我在主活动中有一个列表,当我点击列表项时,会打开一个片段,并且工具栏标题应该更改。我的单击处理程序在片段中;它需要移动到活动中吗? - Matt
1
@HEATH3N onActivityCreated 是针对片段的,当片段上调用 onActivityCreated 时,意味着其父活动已完全初始化(无空指针风险)。 - Yoann Hercouet

2

使用Kotlin从资源中设置标题

活动:

setTitle(R.string.some_title)

Fragment:

activity?.setTitle(R.string.some_title)

1

最好且最简单的方法是前往 Android Manifest 并更改 Activity 部分内的 label。这是负责在工具栏上标注 Activity 的部分。这样可以避免在类文件中编写大量代码。


0
在 Kotlin 中:
onCreate 方法中,加入 title = "这里放一些文本"

-2

这个在活动中对我有效。我还没有在片段中尝试过。

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

虽然这段代码可能回答了问题,但提供关于它如何解决问题以及为什么解决问题的额外上下文会提高答案的长期价值。另外,Activity 中有一个拼写错误。顺便问一下,这与其他答案有何不同? - Dev-iL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接