0

ネットワークに到達できない場合、フラグメント内でアクションバーに更新ボタンを追加する必要があります。

例えば:

    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 が発生しました。

4

1 に答える 1

3

アクティビティで onCreateOptionsMenu() をオーバーライドし、リフレッシュ MenuItem をメニューに追加します (これは、メニュー リソースを拡張するか、プログラムでインスタンス化することで実行できます)。次に、更新項目を非表示にし、後でアクセスできるようにインスタンス変数として保存します。

アクティビティに追加:

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

最後に、Activity にインターフェイスを実装し、ネットワーク エラーが発生したときに MenuItem の可視性を可視に設定します。「implements OnNetworkUnavailableListener」をアクティビティに追加することを忘れないでください。

public class MainActivity extends Activity implements OnNetworkUnavailableListener
{
    ...

    @Override
    public void onNetworkUnavailable()
    {
        mRefreshMenuItem.setVisible(true);
    }
}
于 2013-11-03T21:52:42.667 に答える