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

getActivity().getActionBar() is giving null on fragment

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

片段Class代码:

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

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

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

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

创建回电

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

并在您的 activity

中实施
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: 根据您的要求,如果您希望 activity 监听片段上的每个按钮,请在片段中尝试以下代码

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

检查主题是否使用了此主题activity 还要检查您是否正在使用 AppCompatActivity 扩展 activity 然后使用 getSupportActionBar()

那么问题就解决了。我所做的是,创建了一个接口,并为我的 Activity class 提供了一个回调。感谢@GianhTran 提出解决方案。它运行良好。

这是我的代码片段:

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

//创建接口

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

// 在 class

的构造函数中初始化它
public class UtilOnClickListener {

public UtilOnClickListener(View view) {

if (Calculator.getContext() instanceof MainActivity) {
mListener = (OnActionBarListener) Calculator.getContext();
}
}
}

这里是 MainActivity.java

public class MainActivity extends AppCompatActivity implements UtilOnClickListener.OnActionBarListener {

 @Override  
public void onChangeActionBarTitle(int score) {
getSupportActionBar().setTitle(Integer.toString(score));
}
}