【问题标题】:Can't get Action Bar in fragment class无法在片段类中获取操作栏
【发布时间】:2012-08-14 09:03:58
【问题描述】:

我有一个包含三个片段类的活动。尝试从其中更改操作栏标题时出现错误。如果我尝试将这些类设为 public 而不是 public static,则在尝试启动该类时会出现错误。应该很清楚,代码是针对偏好的,尽管这不会改变任何东西。代码如下:

package com.simon.wikiics;

import android.preference.*;
import android.os.*;
import java.util.*;

public class MainSettingsActivity extends PreferenceActivity {

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

}

@Override
public void onBuildHeaders(List<Header> target) {
    loadHeadersFromResource(R.xml.headers, target);
}

//If I don't make the classes static my app force closes when I try to start them
public static class NavigationSettingsActivity extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.navigation);
        //The getActionBar() is what is giving me the error
        getActionBar().setTitle("Navigation");

    }
}

public static class InterfaceSettingsActivity extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.interf);
        //The getActionBar() is what is giving me the error
        getActionBar().setTitle("Interface");
    }

}

public static class OtherSettingsActivity extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.other);
        //The getActionBar() is what is giving me the error
        getActionBar().setTitle("Other");
    }
}
}

【问题讨论】:

    标签: android class android-actionbar fragment


    【解决方案1】:

    @罗伯特·埃斯蒂维尔 如果您使用的是AppCompatActivity,请使用:

    actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();
    

    【讨论】:

    • ActionBarActivity 已弃用。你也可以 actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();
    • 您是否在 Android 2 手机上检查过该演员表是否真的有效?
    【解决方案2】:

    一个静态类不能看到另一个类的私有字段。您需要使用getActivity().getActionBar() 来检索它。

    【讨论】:

    • 谢谢!还有一个问题,我如何通过这个片段类内部的意图启动一个活动?
    • @SweSnow context.startActivity(new Intent(context, MyActivity.class));
    • 我正在尝试使用您的方法 (getActivity().getActionBar().setDisplayShowTitleEnabled(false)) 关闭操作栏标题,但出现空指针异常。
    • @SrikarReddy 发生这种情况的原因有很多。最可能的原因是您使用的活动主题不包含操作栏。我会仔细检查您的主题是否类似于“android:Theme.Holo.Light.DarkActionBar”。
    【解决方案3】:

    虽然我在这里回答迟了。 我发现 arul 的答案很完美,但现在 ActionbarActivity 已被弃用,因此对该答案稍作修改即可完成工作:

    ActionBar actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();
    

    【讨论】:

      【解决方案4】:

      对于 AppCompatActivity,建议切换到 Toolbar 而不是操作栏,但如果您不这样做,请使用它来获取操作栏的实例。

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

      【讨论】:

        【解决方案5】:

        如果您使用 SherlokActionBar,您可以使用

        调用您的操作栏
        ActionBar mActionBar = ((SherlockFragmentActivity) getActivity()).getSupportActionBar();
        

        【讨论】:

          猜你喜欢
          • 2016-09-03
          • 2011-07-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-23
          • 1970-01-01
          • 1970-01-01
          • 2023-03-06
          相关资源
          最近更新 更多