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()调用它。