1

我正在尝试在 viewpager 中实现自定义选项卡。有人可以建议如何设置它。

 protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            // Inflate the layout
            setContentView(R.layout.tabs_viewpager_layout);

            DisplayMetrics displaymetrics = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
            height = displaymetrics.heightPixels;
            width = displaymetrics.widthPixels;

            // Initialise the TabHost
            this.initialiseTabHost(savedInstanceState);
            if (savedInstanceState != null) {
                mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab"));           }
            this.intialiseViewPager();
            mViewPager.setCurrentItem(2);
        }

        /**
         * (non-Javadoc)
         * 
         * @see android.support.v4.app.FragmentActivity#onSaveInstanceState(android.os.Bundle)
         */
        protected void onSaveInstanceState(Bundle outState) {
            outState.putString("tab", mTabHost.getCurrentTabTag()); // save the tab
                                                                    // selected
            super.onSaveInstanceState(outState);
        }

        /**
         * Initialise ViewPager
         */
        private void intialiseViewPager() {

            List<Fragment> fragments = new Vector<Fragment>();
            fragments.add(Fragment.instantiate(this, Info.class.getName()));
            fragments.add(Fragment.instantiate(this, Search.class.getName()));
            fragments.add(Fragment.instantiate(this, Home.class.getName()));
            fragments.add(Fragment.instantiate(this, Profile.class.getName()));

            this.mPagerAdapter = new PagerAdapter(
                    super.getSupportFragmentManager(), fragments);
            //
            this.mViewPager = (ViewPager) super.findViewById(R.id.viewpager);
            this.mViewPager.setAdapter(this.mPagerAdapter);
            this.mViewPager.setOnPageChangeListener(this);
        }

        /**
         * Initialise the Tab Host
         */
        private void initialiseTabHost(Bundle args) {

            mTabHost = (TabHost) findViewById(android.R.id.tabhost);
            mTabHost.setup();
            TabInfo tabInfo = null;
            View view = createTabView(mTabHost.getContext(), "test");

            TabsViewPagerFragmentActivity.AddTab(
                    this,
                    this.mTabHost,
                    this.mTabHost.newTabSpec("Tab1").setIndicator(view),
                    (tabInfo = new TabInfo("Tab1", Info.class, args)));
            this.mapTabInfo.put(tabInfo.tag, tabInfo);

            TabsViewPagerFragmentActivity.AddTab(
                    this,
                    this.mTabHost,
                    this.mTabHost.newTabSpec("Tab2").setIndicator("",
                            getResources().getDrawable(R.drawable.search_icon)),
                    (tabInfo = new TabInfo("Tab2", Search.class, args)));
            this.mapTabInfo.put(tabInfo.tag, tabInfo);

            TabsViewPagerFragmentActivity.AddTab(
                    this,
                    this.mTabHost,
                    this.mTabHost.newTabSpec("Tab3").setIndicator("",
                            getResources().getDrawable(R.drawable.home_icon)),
                    (tabInfo = new TabInfo("Tab3", Home.class, args)));
            this.mapTabInfo.put(tabInfo.tag, tabInfo);
            mTabHost.setCurrentTab(2);
            TabsViewPagerFragmentActivity.AddTab(
                    this,
                    this.mTabHost,
                    this.mTabHost.newTabSpec("Tab4").setIndicator("",
                            getResources().getDrawable(R.drawable.member_icon)),
                    (tabInfo = new TabInfo("Tab4", Profile.class, args)));
            this.mapTabInfo.put(tabInfo.tag, tabInfo);

            mTabHost.getTabWidget().getChildAt(0).getLayoutParams().width = (width / 4) - 50;
            mTabHost.getTabWidget().getChildAt(1).getLayoutParams().width = (width / 4) - 50;
            mTabHost.getTabWidget().getChildAt(2).getLayoutParams().width = (width / 4) + 100;
            mTabHost.getTabWidget().getChildAt(3).getLayoutParams().width = (width / 4) - 50;

            mTabHost.setOnTabChangedListener(this);

        }

        private void setupTab(final View view, final String tag) {
            View tabview = createTabView(mTabHost.getContext(), tag);
            TabSpec setContent = mTabHost.newTabSpec(tag).setIndicator(tabview)
                    .setContent(new TabContentFactory() {
                        public View createTabContent(String tag) {
                            return view;
                        }
                    });
            mTabHost.addTab(setContent);
        }

        private static View createTabView(final Context context, final String text) {
            View view = LayoutInflater.from(context).inflate(
                    R.layout.tab_indicator_holo, null);
            TextView tv = (TextView) view.findViewById(R.id.title);
            tv.setText(text);
            return view;
        }

        private static void AddTab(TabsViewPagerFragmentActivity activity,
                TabHost tabHost, TabHost.TabSpec tabSpec, TabInfo tabInfo) {
            // Attach a Tab view factory to the spec

            tabSpec.setContent(activity.new TabFactory(activity));
            tabHost.addTab(tabSpec);

        }

这是我的堆栈跟踪

    07-22 07:53:45.631: E/AndroidRuntime(1612): FATAL EXCEPTION: main
07-22 07:53:45.631: E/AndroidRuntime(1612): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.main.udebate/com.main.udebate.TabsViewPagerFragmentActivity}: java.lang.NullPointerException
07-22 07:53:45.631: E/AndroidRuntime(1612):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
07-22 07:53:45.631: E/AndroidRuntime(1612):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
07-22 07:53:45.631: E/AndroidRuntime(1612):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
07-22 07:53:45.631: E/AndroidRuntime(1612):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
07-22 07:53:45.631: E/AndroidRuntime(1612):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-22 07:53:45.631: E/AndroidRuntime(1612):     at android.os.Looper.loop(Looper.java:137)
07-22 07:53:45.631: E/AndroidRuntime(1612):     at android.app.ActivityThread.main(ActivityThread.java:5041)
07-22 07:53:45.631: E/AndroidRuntime(1612):     at java.lang.reflect.Method.invokeNative(Native Method)
07-22 07:53:45.631: E/AndroidRuntime(1612):     at java.lang.reflect.Method.invoke(Method.java:511)
07-22 07:53:45.631: E/AndroidRuntime(1612):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-22 07:53:45.631: E/AndroidRuntime(1612):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-22 07:53:45.631: E/AndroidRuntime(1612):     at dalvik.system.NativeStart.main(Native Method)
07-22 07:53:45.631: E/AndroidRuntime(1612): Caused by: java.lang.NullPointerException
07-22 07:53:45.631: E/AndroidRuntime(1612):     at com.main.udebate.TabsViewPagerFragmentActivity.createTabView(TabsViewPagerFragmentActivity.java:244)
07-22 07:53:45.631: E/AndroidRuntime(1612):     at com.main.udebate.TabsViewPagerFragmentActivity.initialiseTabHost(TabsViewPagerFragmentActivity.java:178)
07-22 07:53:45.631: E/AndroidRuntime(1612):     at com.main.udebate.TabsViewPagerFragmentActivity.onCreate(TabsViewPagerFragmentActivity.java:121)
07-22 07:53:45.631: E/AndroidRuntime(1612):     at android.app.Activity.performCreate(Activity.java:5104)
07-22 07:53:45.631: E/AndroidRuntime(1612):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
07-22 07:53:45.631: E/AndroidRuntime(1612):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
4

0 回答 0