亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Actionbarsherlock +選項卡+多個片段?

Actionbarsherlock +選項卡+多個片段?

MMMHUHU 2019-12-21 13:21:30
我非常努力地使actionbarsherlock +選項卡+片段正常工作。我只能將其設置為靜態,我想創建一個類似android market app(滑動運動)的應用。當您需要為內部包含多個片段的布局充氣時,我會陷入困境。在Support4demos中,我以FragmentsTabsPager為例。
查看完整描述

3 回答

?
當年話下

TA貢獻1890條經驗 獲得超9個贊

您需要正確的庫來實現所需的庫。


基本上,ViewPager圖書館是您所缺少的。我的建議:


1. ActionbarSherlock


使用起來非常簡單,我不會解釋。


2. ViewPagerExtensions


你可以在這里找到它。下載ZIP文件并從中創建一個新項目。


我只能將此設置設為靜態,我想創建一個類似android market app(Swype Movement)的應用。


com.astuetz.viewpager.extensions.SwipeyTabsView從該項目實施。有易于理解的示例。它確實滿足您的需求。甚至還有其他選項卡樣式可供選擇(包括ICS附帶的新“人員”選項卡)。此外,對其進行樣式設置以使其與您的應用程序身份匹配非常容易。


3。 FragmentPagerAdapter


最后,來自支持庫(v4)的該類。


祝您好運,如果您需要更多幫助,請隨時問我。


如果您使用的是我建議的內容instantiateItem,FragmentPagerAdapter則無需覆蓋。你只需要


為構造函數提供a FragmentManager并調用super實現;

重寫getCount以返回尋呼機中的片段數,并且

getItem,這將用于返回您的片段以進行創建。

這是我在這里的代碼中的一個示例(完整的工作示例)。這是實現尋呼機的活動的內部類:


static class MyFragmentPagerAdapter extends FragmentPagerAdapter {


    public MyFragmentPagerAdapter(FragmentManager fm) {

        super(fm);

    }


    @Override

    public int getCount() {

        return 2;

    }


    @Override

    public Fragment getItem(int position) {

        Fragment f;

        switch(position) {

        case 0:

            f= new ItemSalesDataFragment();

            break;

        case 1:

            f= new DepartmentChooserFragment();

            break;

        default:

            throw new IllegalArgumentException("not this many fragments: " + position);

        }

        return f;

    }

}

如您所見,此尋呼機處理兩個“頁面”,左側顯示銷售數據。右邊的允許用戶選擇哪個部門。這些將在getItem方法中返回。適當的片段(您可以使用現有的任何片段,無需修改)。


如預期的那樣,您可以通過以下兩種方式將所有這些結合在一起:1)創建一個實例化的對象MyFragmentPagerAdapter,以及2)將適配器設置為您的ViewPager對象,使其成為您剛剛實例化的類。如您所見,其getItem方法將“賦予”尋呼機所需的所有片段。例:


mFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());

mViewPager.setAdapter(mFragmentPagerAdapter);

當然,還有其他事情要做,例如自己創建選項卡按鈕并將所有這些都結合在一起進行交叉通信。我建議查看從GitHub下載的ViewPagerExtensions ZIP文件中提供的示例。這只是您評論中問題的答案。如您所見,使用該庫的代碼并不多。


查看完整回答
反對 回復 2019-12-21
?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

實際上,除了ABS庫和支持庫之外,我實際上沒有其他任何問題。這是我的代碼:


public class ActionBarTabs extends SherlockFragmentActivity {

CustomViewPager mViewPager;

TabsAdapter mTabsAdapter;

TextView tabCenter;

TextView tabText;

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

            WindowManager.LayoutParams.FLAG_FULLSCREEN);


    mViewPager = new CustomViewPager(this);

    mViewPager.setId(R.id.pager);


    setContentView(mViewPager);

    ActionBar bar = getSupportActionBar();

    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);


    mTabsAdapter = new TabsAdapter(this, mViewPager);


    mTabsAdapter.addTab(bar.newTab().setText("Home"),

            ToolKitFragment.class, null);

    mTabsAdapter.addTab(bar.newTab().setText("FujiSan"),

            FujiFragment.class, null);

}


public static class TabsAdapter extends FragmentPagerAdapter implements

        ActionBar.TabListener, ViewPager.OnPageChangeListener {

    private final Context mContext;

    private final ActionBar mActionBar;

    private final ViewPager mViewPager;

    private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();


    static final class TabInfo {

        private final Class<?> clss;

        private final Bundle args;


        TabInfo(Class<?> _class, Bundle _args) {

            clss = _class;

            args = _args;

        }

    }


    public TabsAdapter(SherlockFragmentActivity activity, ViewPager pager) {

        super(activity.getSupportFragmentManager());

        mContext = activity;

        mActionBar = activity.getSupportActionBar();

        mViewPager = pager;

        mViewPager.setAdapter(this);

        mViewPager.setOnPageChangeListener(this);

    }


    public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) {

        TabInfo info = new TabInfo(clss, args);

        tab.setTag(info);

        tab.setTabListener(this);

        mTabs.add(info);

        mActionBar.addTab(tab);

        notifyDataSetChanged();

    }


    @Override

    public int getCount() {

        return mTabs.size();

    }


    @Override

    public Fragment getItem(int position) {

        TabInfo info = mTabs.get(position);

        return Fragment.instantiate(mContext, info.clss.getName(),

                info.args);

    }


    @Override

    public void onPageScrolled(int position, float positionOffset,

            int positionOffsetPixels) {

    }


    @Override

    public void onPageSelected(int position) {

        mActionBar.setSelectedNavigationItem(position);

    }


    @Override

    public void onPageScrollStateChanged(int state) {

    }


    @Override

    public void onTabSelected(Tab tab, FragmentTransaction ft) {

        Object tag = tab.getTag();

        for (int i = 0; i < mTabs.size(); i++) {

            if (mTabs.get(i) == tag) {

                mViewPager.setCurrentItem(i);

            }

        }

    }


    @Override

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {

    }


    @Override

    public void onTabReselected(Tab tab, FragmentTransaction ft) {

    }

}

}

您可以根據以下內容加載選項卡內容。


mTabsAdapter.addTab(bar.newTab().setText("Home"),

            YOURFRAGMENTHERE.class, null);  

如您所指,這將為您帶來ABS,支持庫和片段的可愛“滑動選項卡”效果。ABS確實使這幾乎與處理本機庫相同。實際上,我直接從Google的分頁選項卡示例中復制了此代碼,并為ABS進行了少許修改。


希望這可以幫助!


查看完整回答
反對 回復 2019-12-21
  • 3 回答
  • 0 關注
  • 524 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號