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