Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android getActivity().getActionBar()在片段上提供null_Android_Android Actionbar - Fatal编程技术网

Android getActivity().getActionBar()在片段上提供null

Android getActivity().getActionBar()在片段上提供null,android,android-actionbar,Android,Android Actionbar,我有一个片段,需要动态更改ActionBar的标题。但是当我使用下面的代码时,它给了我NullPointerException。这里getActionBar()返回null,我的问题是如何在Fragment类中获取ActionBar的引用。提前感谢你的帮助 片段类代码: public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ActionB

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

片段类代码:

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);
    }
并在您的活动中实施它

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

}
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);
    }
希望这有帮助

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

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

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

检查主题是否已将操作栏主题用于此活动 还要检查您是否正在使用AppCompatActivity扩展活动
然后使用getSupportActionBar()

,这样问题现在就解决了。我所做的是创建一个接口,并回调我的Activity类。感谢@GianhTran提出的解决方案。它运行良好

以下是我的代码片段:

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

//创建了一个接口

public interface OnActionBarListener {
  void onChangeActionBarTitle(int score);
 }
//在该类的构造函数中初始化它

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

我已经在用AppCompactActivity扩展我的活动,我正在使用NoActionBar主题,就像我在navigationdrawer中使用它一样。这是我想用我的片段做的,但我需要在单击按钮时更改标题,所以我需要活动在每次单击按钮时进行监听。对于button click,我有另一个自定义类来处理所有的点击事件(不在fragmnet类中)。您能否在此基础上给出一个示例……非常感谢您的帮助。@Paramita我根据
更新了我的答案,因此我需要该活动来监听每个按钮的点击
,但是关于request
和button click,我有另一个自定义类,我在其中处理所有的click事件(不在fragmnet类中,我不清楚,你能解释更多吗?嗨,Gianh..我的问题解决了。我尝试在我的自定义按钮单击类中创建一个接口,并按照你的建议回调MainActivity。感谢你的大力帮助..非常感谢。它很有效。太棒了。