1

私は3つのフラグメントを持つViewPagerを持っています。必要なフラグメントに対してのみ、アクションバー メニュー オプションを選択的に設定できます。

同様に、 ActionBar の Spinner を介してナビゲーション リストを提供したいと考えています。ここでも、Navigation List は ViewPager のフラグメントの 1 つに対してのみ表示され、すべてのフラグメントに対しては表示されません。しかし、これに対する私の試みは失敗しました。ナビゲーション リストはアクションバーに表示されますが、すべてのフラグメントに対して残ります。

以下は、ViewPager で使用するフラグメントの 1 つです。このフラグメントをビューにスライドさせたときにのみ、ナビゲーション リストが表示されるようにします。

public class TransactionsFragment extends SherlockFragment implements
    ActionBar.OnNavigationListener{

    private ActionBar mActionBar;

    @SuppressLint("NewApi")
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        ViewGroup rootView = (ViewGroup) inflater.inflate(
                R.layout.fragment_transactions, container, false);

        // Set up the action bar to show a dropdown list
        mActionBar = getActivity().getActionBar();
        mActionBar.setDisplayShowTitleEnabled(false);
        mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

        final String[] dropdownValues = {"Test","Old"};

     // Specify a SpinnerAdapter to populate the dropdown list

        ArrayAdapter<String> adapter = null;
        if(android.os.Build.VERSION.SDK_INT >= 14) {
            adapter = new ArrayAdapter<String>(mActionBar.getThemedContext(),
                    android.R.layout.simple_spinner_item, android.R.id.text1,
                    dropdownValues);
        } else {
            adapter = new ArrayAdapter<String>(getActivity().getBaseContext(),
                    android.R.layout.simple_spinner_item, android.R.id.text1,
                    dropdownValues);
        }

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        // Set up the dropdown list navigation in the action bar.
        mActionBar.setListNavigationCallbacks(adapter, this);

        return rootView;
    }

このフラグメントが表示されている場合にのみナビゲーション リストが表示されるように制限するにはどうすればよいですか?

4

2 に答える 2

2

OPと同じニーズがあり、Matthiasが提案した方法と他の情報源からのビットを使用しました。Android の新参者である私にとって、これは挑戦でした。検索でここにたどり着いた他の人に役立つかもしれない詳細を提供します。

このためのすべてのコードは、ナビゲーション スピナーを表示する 1 つの Fragment にあります。他のフラグメントに混乱はありません。

private ActionBar actionBar;


public void onResume() {
    super.onResume();

    if(actionBar==null) {

        actionBar = getActivity().getActionBar();

        // get spinner items defined in values/strings/dropdown
        final String[] dropdownValues = getResources().getStringArray(R.array.dropdown);

        // set up the actionbar appearance
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

        // Specify a SpinnerAdapter to populate the dropdown list.
        ArrayAdapter<String> aAdapter = new ArrayAdapter<String>(actionBar.getThemedContext(),
                android.R.layout.simple_spinner_item, android.R.id.text1,dropdownValues);

        aAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        // setup for callbacks to detect item selection
        actionBar.setListNavigationCallbacks(aAdapter, this);
    }
}

 @Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {

    //System.err.println("Spinner selection: " + itemPosition);
    //do stuff based on itemPosition

    return false;
}

最後に、ナビゲーション スピナーをオンまたはオフにするためのより完全なコードを示します。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);

    if (actionBar!=null) {
        if (isVisibleToUser) {
            actionBar.setDisplayShowTitleEnabled(false);
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
        }
        else  {
            actionBar.setDisplayShowTitleEnabled(true);
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
        }
    }
}

編集: また、フラグメントは、このように ActionBar.OnNavigationListener を実装する必要があります...

public class DisplayStuffFragment extends Fragment implements ActionBar.OnNavigationListener {

...
}
于 2014-12-19T18:51:51.460 に答える