第一个片段崩溃时的getActivity().getActionBar()

Ben*_*Luk 1 android fragment android-actionbar

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setupViewPager();

    }

    private void setupViewPager() {
        // TODO Auto-generated method stub
        FragmentPagerItemAdapter adapter = new FragmentPagerItemAdapter(
                getSupportFragmentManager(), FragmentPagerItems.with(this)
                        .add("Home", HomeFragment.class)
                        .add("Message", MessageFragment.class)
                        .add("My", MyFragment.class).create());

        ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
        viewPager.setAdapter(adapter);
        SmartTabLayout viewPagerTab = (SmartTabLayout) findViewById(R.id.viewpagertab);
        final LayoutInflater inflater = LayoutInflater.from(viewPagerTab.getContext());
        final Resources res = viewPagerTab.getContext().getResources();
        viewPagerTab.setCustomTabView(new SmartTabLayout.TabProvider() {
            @Override
            public View createTabView(ViewGroup container, int position,PagerAdapter adapter) {
                ImageView icon = (ImageView) inflater.inflate(R.layout.mainactivity_tab, container, false);
                switch (position) {
                case 0:
                    icon.setImageDrawable(res.getDrawable(R.drawable.mainactivity_tab_icon_home));
                    break;
                case 1:
                    icon.setImageDrawable(res.getDrawable(R.drawable.mainactivity_tab_icon_message));
                    break;
                case 2:
                    icon.setImageDrawable(res.getDrawable(R.drawable.mainactivity_tab_icon_my));
                    break;
                default:
                    throw new IllegalStateException("Invalid position: "+ position);
                }
                return icon;
            }
        });
        viewPagerTab.setViewPager(viewPager);

    }
Run Code Online (Sandbox Code Playgroud)

这是三个片段中的代码

public class HomeFragment extends Fragment {
    View rootView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.fragment_home, container, false);

        TextView title = (TextView) rootView.findViewById(R.id.item_title);
        title.setText("Home");

        return rootView;
    }

    @Override
    public void setMenuVisibility(final boolean visible) {
        super.setMenuVisibility(visible);
        if (visible) {
            Log.d("Action bar", "Home");

            ActionBar mActionBar= getActivity().getActionBar();
            mActionBar.setDisplayShowHomeEnabled(true);
            mActionBar.setDisplayShowTitleEnabled(false);

            LayoutInflater mInflater = LayoutInflater.from(getActivity());
            View mCustomView = mInflater.inflate(R.layout.actionbar_message, null);
            mActionBar.setCustomView(mCustomView);
            mActionBar.setDisplayShowCustomEnabled(true);
            TextView title = (TextView) mCustomView.findViewById(R.id.actionbar_message_title);

            title.setText("Home action bar");
        }
    }
Run Code Online (Sandbox Code Playgroud)

它们适用于MessageFragment.class和MyFragment,但不适用于HomeFragment.它会崩溃并ActionBar mActionBar = getActivity().getActionBar();返回null并崩溃.

为什么它只适用于MessageFragment和MyFragment?

HomeFragment是第一个展示的片段.

我的想法:我将在不同的片段上使用不同的自定义操作栏.

Pra*_*ena 5

替换此行

ActionBar mActionBar = getActivity().getActionBar();

这样

ActionBar mActionBar=((ActionBarActivity) getActivity()).getSupportActionBar();

这是因为你扩展了 ActionBarActivity