我有一个片段,我需要在其中动态更改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;
}
答案 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));
}
}