Android将按钮添加到片段内的操作栏

Android将按钮添加到片段内的操作栏,android,android-fragments,android-actionbar,android-fragmentactivity,Android,Android Fragments,Android Actionbar,Android Fragmentactivity,在我的片段中,如果网络无法检查,我需要将刷新按钮添加到我的操作栏中 例如: private void beginRetriveData() { final StringBuilder Request = "some_url_here" if(!isNetworkAvailable()) { Toast.makeText(getSherlockActivity(), "No active int

在我的片段中,如果网络无法检查,我需要将刷新按钮添加到我的操作栏中

例如:

    private void beginRetriveData() {

            final StringBuilder Request = "some_url_here"

            if(!isNetworkAvailable()) {     

                Toast.makeText(getSherlockActivity(), "No active internet connection", Toast.LENGTH_LONG).show(); 
// I NEED TO ADD REFRESH BUTTON TO ACTIONBAR    

            } else {
                     //AsyncTasc here

            }   
        }
哪种方法最好

我尝试了以下方法:

public MenuItem mRefreshMenuItem;

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu items for use in the action bar
        getSupportMenuInflater().inflate(R.menu.main, menu);

        mRefreshMenuItem = menu.findItem(R.id.navigation_refresh);
        mRefreshMenuItem.setVisible(false);

        return true;
    }

    @Override
    public void onNetworkUnavailable()
    {
        mRefreshMenuItem.setVisible(true); //ERROR HERE 
    }
然后在片段中我称之为:

 if(getActivity() instanceof FragmentsHolderActivity){
      FragmentsHolderActivity myactivity = (FragmentsHolderActivity) activity;
      myactivity.onNetworkUnavailable();
 }

但是当我调用onNetworkUnavailable()时,出现了一个NullPointerException。

在活动中重写onCreateOptions菜单(),并向菜单中添加一个刷新菜单项(可以通过扩展菜单资源或以编程方式实例化来实现)。然后使刷新项不可见,并将其另存为实例变量以供以后访问

添加到您的活动中:

private MenuItem mRefreshMenuItem;

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    // add your refresh button to res/menu/main.xml
    getMenuInflater().inflate(R.menu.main, menu);

    mRefreshMenuItem = menu.findItem(R.id.refresh);
    mRefreshMenuItem.setVisible(false);

    return true;
}
接下来,添加一个接口,以便您的片段可以让您的活动知道何时发生网络错误,如中所述

添加到您的片段中:

private OnNetworkUnavailableListener mListener;

public interface OnNetworkUnavailableListener
{
    public void onNetworkUnavailable();
}

@Override
public void onAttach(Activity activity)
{
    super.onAttach(activity);
    try
    {
        mListener = (OnNetworkUnavailableListener)activity;
    }
    catch (ClassCastException ex)
    {
        throw new ClassCastException(activity.getClass().getSimpleName() + " must implement OnNetworkUnavailableListener");
    }
}
此外,当网络不可用时,在接口上调用该方法:

private void beginRetriveData()
{
    ...
    if(!isNetworkAvailable())
    {     
        mListener.onNetworkUnavailable();
    }
    ...
}
最后,在活动中实现您的界面,并在发生网络错误时将菜单项的可见性设置为可见。请记住将“implements OnNetworkUnavailableListener”添加到活动中

public class MainActivity extends Activity implements OnNetworkUnavailableListener
{
    ...

    @Override
    public void onNetworkUnavailable()
    {
        mRefreshMenuItem.setVisible(true);
    }
}

创建对您的活动的回调,下面是一个示例:谢谢。但不是工作。在使用mRefreshMenuItem.setVisible(true)在线调用mListener.onNetworkUnavailable()时发生错误(NullPointerException);在更新的示例中,您可能在调用OnCreateOptions菜单()之前调用onNetworkUnavailable()。当您调用onNetworkUnavailable()时?@oncreateoptions菜单,您是对的,oncreateoptions菜单在oncreate()之后调用,我的片段在oncreate中调用。所以我的问题是在OnCreateOptions菜单之后调用fragment。但是我不知道怎么做。试着用onStart()而不是onCreate()调用它。