【问题标题】:actionbarsherlock using tabnavigation tan navigationactionbarsherlock 使用 tabnavigation 棕褐色导航
【发布时间】:2012-09-14 14:40:23
【问题描述】:

我有一个需要标签导航的后期需求更改。我已经在我的应用程序中使用了 ActionBarSherlock。以前我的 UI 由活动组成。但是从我读到的 TabBar 需要片段活动?有什么办法可以保留现有代码并实现 TabBar,或者这需要完全重写我的应用程序吗?我的所有活动都扩展了 SherlockActivity ?

亲切的问候,

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.SherlockFragmentActivity;




public class NewMainActivity extends SherlockFragmentActivity implements ActionBar.TabListener,
        ViewPager.OnPageChangeListener
{
    private ViewPager mViewPager;

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.textlayout);
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(new MainPagerAdapter(getSupportFragmentManager()));
        mViewPager.setOnPageChangeListener(this);
        //mViewPager.setPageMarginDrawable(R.drawable.border);
        mViewPager.setPageMargin(16);
        final ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        actionBar.addTab(actionBar.newTab().setText("First Tab").setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText("Second Tab").setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText("Third Tab").setTabListener(this));
    }

    @Override
    public void onPageScrollStateChanged(int arg0)
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2)
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPageSelected(int arg0)
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft)
    {
        mViewPager.setCurrentItem(tab.getPosition());

    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft)
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft)
    {
        // TODO Auto-generated method stub

    }

    private class MainPagerAdapter extends FragmentPagerAdapter
    {
        public MainPagerAdapter(FragmentManager fm)
        {
            super(fm);
        }

        @Override
        public Fragment getItem(int position)
        {
            switch (position)
            {
            case 0:
                // return (mFragmentA = new FragmentA());

            case 1:
                // return (mFragmentB = new FragmentB());

            case 2:
                // return (mFragmentC = new FragmentC());

            }
            return null;
        }

        @Override
        public int getCount()
        {
            return 3;
        }
    }
}

【问题讨论】:

    标签: android actionbarsherlock


    【解决方案1】:

    当然,您不必重新编写应用程序。您只需要一些折射即可。

    首先,您应该首先将您的代码移至SherlockFragment(s)。

    假设您有 3 个活动:ActivityAActivityBActivityC

    1 - 创建 3 个 SherlockFragment:FragmentAFragmentBFragmentC

    2 - 将您的代码移动到片段并进行必要的修改(例如覆盖、上下文引用等)。

    3 - 现在使用标签导航设置您的主要 FragmentActivity:

    public class MainActivity extends SherlockFragmentActivity implements
            ActionBar.TabListener, ViewPager.OnPageChangeListener {
    
        private FragmentA mFragmentA;
        private FragmentB mFragmenB;
        private FragmentC mFragmentC;
    
        private ViewPager mViewPager;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main_layout);
            mViewPager = (ViewPager) findViewById(R.id.pager);
            mViewPager.setAdapter(new MainPagerAdapter(
                    getSupportFragmentManager()));
            mViewPager.setOnPageChangeListener(this);
            mViewPager.setPageMarginDrawable(R.drawable.border);
            mViewPager.setPageMargin(16);
            final ActionBar actionBar = getSupportActionBar();
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
            actionBar.addTab(actionBar.newTab().setText(R.string.tab_a_title)
                    .setTabListener(this));
            actionBar.addTab(actionBar.newTab().setText(R.string.tab_b_title)
                    .setTabListener(this));
            actionBar.addTab(actionBar.newTab()
                    .setText(R.string.tab_c_title).setTabListener(this));
        }
    
        @Override
        public void onPageSelected(int position) {
            getSupportActionBar().setSelectedNavigationItem(position);
        }
    
        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            mViewPager.setCurrentItem(tab.getPosition());
        }
    
        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    
        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }
    
        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        }
    
        @Override
        public void onTabReselected(Tab tab, FragmentTransaction ft) {
        }
    
        private class MainPagerAdapter extends FragmentPagerAdapter {
            public MainPagerAdapter(FragmentManager fm) {
                super(fm);
            }
    
            @Override
            public Fragment getItem(int position) {
                switch (position) {
                case 0:
                    return (mFragmentA = new FragmentA());
    
                case 1:
                    return (mFragmentB = new FragmentB());
    
                case 2:
                    return (mFragmentC = new FragmentC());
    
                }
                return null;
            }
    
    
            @Override
            public int getCount() {
                return 3;
            }
        }
    }
    

    ma​​in_layout.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
    
    </LinearLayout>
    

    【讨论】:

    • 我得到一个空指针异常。将我的问题更新为我的代码。
    • 您的 MainPagerAdapter 始终返回 null。你应该返回一个片段。
    • 好的。您能否展示一些如何从 Activity 迁移到 SherlockFragmentActivity 的代码。 setContentView 和 findViewById 似乎不是其中的一部分?
    猜你喜欢
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多