getActivity()。getActionBar()在片段上给出null

时间:2018-07-16 02:59:15

标签: android android-actionbar

我有一个片段,我需要在其中动态更改ActionBar的标题。但是,当我使用以下代码时,它给了我NullPointerException。这里getActionBar()返回null,我的问题是如何在ActionBar类中获取Fragment的引用。提前感谢您的帮助。

片段类代码:

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

      ActionBar mActionBar = getActivity().getActionBar();
      mActionBar.setTitle("Your new score is :"+ i);
      return rootView;
}

4 个答案:

答案 0 :(得分:0)

如果您使用的是支持库,请尝试使用getSupportActionBar()而不是getActionBar()

答案 1 :(得分:0)

我认为最好的解决方案是从您的片段中进行回叫,如下所示:

创建回叫

public interface OnActionBarListener {
        void onChangeActionBarTitle(int score);
    }

并在您的活动中实施

public class YourActivity extends AppCompatActivity
        implements OnActionBarListener {
    @Override
    public void onChangeActionBarTitle(int score) {
       mActionBar.setTitle("Your new score is :"+ score);
    }
}

以及您的片段中

public class YourFragment extends Fragment {
    OnActionBarListener mListener;

 @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof YourActivity) {
            mListener = (OnActionBarListener) context;
        }

    }
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       if (mListener != null) mListener.onChangeActionBarTitle(i);
       return rootView;
}

}

希望这会有所帮助!

更新1:根据您的请求,如果您想让活动监听片段上的每个按钮,请尝试以下片段中的代码

Button mButton1;
Button mButton2;

mButton1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                changeTitle(your_score);
            }
        });
mButton2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                changeTitle(your_score);
            }
        });

void changeTitle(int score) {
        if (mListener != null) mListener.onChangeActionBarTitle(i);
    }

答案 2 :(得分:0)

检查主题是否在此活动中使用了操作栏主题 还要检查您是否通过AppCompatActivity扩展自己的活动 然后使用getSupportActionBar()

答案 3 :(得分:0)

因此问题已解决。我所做的是,创建了一个Interface并给了Activity类一个回调。感谢@GianhTran提出解决方案。运行良好。

这是我的代码段:

我的自定义按钮类(UtilOnClickListener.java):

//创建了一个接口

公共接口OnActionBarListener {

    void onChangeActionBarTitle(int score);
}

//在该类的构造函数中对其进行了初始化

公共类UtilOnClickListener

{

公共UtilOnClickListener(视图)

{

如果(MainActivity的Calculator.getContext()实例)

{

mListener =(OnActionBarListener)Calculator.getContext();

}

}

}

这是MainActivity.java

公共类MainActivity扩展了AppCompatActivity实现的UtilOnClickListener.OnActionBarListener

{

@Override

public void onChangeActionBarTitle(int score) {

getSupportActionBar()。setTitle(Integer.toString(score));

}

}