我有一个带有3个片段的ViewPager。我能够仅针对我想要的片段选择性地设置操作栏菜单选项。

同样,我想通过ActionBar中的Spinner提供一个导航列表。再次,导航列表应仅针对ViewPager的片段之一出现,而不针对所有片段出现。但是,我对此的尝试失败了。导航列表显示在操作栏中,但对于所有片段都保留在那里。

以下是我在ViewPager中使用的片段之一。我希望仅当我在视图中滑动此片段时才显示导航列表。

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


如何限制仅在可见此片段时才显示导航列表?

最佳答案

当片段变为可见/不可见时,将触发Fragment#setUserVisibleHint(boolean isVisibleToUser)

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        // enable action bar list navigation
    } else {
        // disable action bar list navigation
    }
}

10-02 11:35