簡體   English   中英

如何使用選項卡標題從 Android PagerAdapter 返回片段

[英]How can I return fragments from Android PagerAdapter using the tab titles

我正在嘗試使用 android 的視圖尋呼機根據用戶配置文件類型動態加載一些片段。 但是 view-pager 根據位置返回片段。 下面是一個描述我的問題的例子。

例子 :

如果用戶是免費用戶,則只顯示“配置文件”和“設置”選項卡。但是當管理員用戶登錄時,他將有 4 個額外的選項卡以及上述兩個選項卡。 (設置選項卡現在被推到最后一個項目。)

我試圖通過將選項卡標題存儲在數組列表中並根據用戶類型設置選項卡標題來實現這一點。通過這種方式,我能夠根據用戶類型正確顯示選項卡標題,但現在錯誤地返回了片段。

所以我在想是否可以根據選項卡標題返回片段。

我該如何正確實施?

PS:我有大約 4 種具有不同頁面的用戶類型。

代碼 :

尋呼機適配器:

@Override
public Fragment getItem(int position) {
    switch (position){
        case 0:
            return ProfileFragment.newInstance("","");
        case 1:
            return ManageOrdersFragment.newInstance("","");
        case 2:
            return ManageSellers.newInstance("","");
        case 3:
            return ProductsFragment.newInstance("","");
        case 4:
            return SettingsFragment.newInstance("","");
        default:
            return ProfileFragment.newInstance("","");
    }
}

標簽標題:

一般用戶:個人資料,設置

賣家:個人資料、產品、設置

管理員:個人資料、訂單、賣家、設置

問題:

這里選項卡標題已正確填充,但為第二個選項卡返回的片段是一般用戶的 ManageOrders 頁面,它應該是設置。 我知道返回片段需要標簽的位置。 如果有人能幫我解決這個問題,那真的很有幫助。

謝謝你。

您只需要使用if或其他switch根據用戶類型更改返回的內容

例如


@Override
public Fragment getItem(int position) {
  if ( getUserType().equals("admin"){
    switch (position){
        case 0:
            return ProfileFragment.newInstance("","");
        case 1:
            return ManageOrdersFragment.newInstance("","");
        case 2:
            return ManageSellers.newInstance("","");
        case 3:
            return SettingsFragment.newInstance("","");
        default:
            return ProfileFragment.newInstance("","");
    }
  } else if (getUserType().equals("seller"){
     switch (position){
        case 0:
            return ProfileFragment.newInstance("","");
        case 1:
            return ProductsFragment.newInstance("","");
        case 2:
            return SettingsFragment.newInstance("","");
        default:
            return ProfileFragment.newInstance("","");
  } else {
     switch (position){
        case 0:
            return ProfileFragment.newInstance("","");
        case 1:
            return SettingsFragment.newInstance("","");
        default:
            return ProfileFragment.newInstance("","");
  }
}

確保您的getPageTitlesgetCount匹配

例如


@Override
public CharSequence getPageTitle(int position) {
  if ( getUserType().equals("admin"){
    switch (position){
        case 0:
            return "Profile";
        case 1:
            return "Orders;
        case 2:
            return "Sellers;
        case 3:
            return "Settings";
        default:
            return "Profile";
    }
  } else if (getUserType().equals("seller"){
    switch (position){
        case 0:
            return "Profile";
        case 1:
            return "Products";
        case 2:
            return "Settings";
        default:
            return "Profile";
  } else {
     switch (position){
        case 0:
            return "Profile";
        case 1:
            return "Settings";
        default:
            return "Profile";
  }

@Override
public int getCount() {
  if ( getUserType().equals("admin"){
    return 4;
  } else if (getUserType().equals("seller"){
    return 3;
  } else {
    return 2;
  }
}

在這種情況下,方法getUserType()返回一個字符串以匹配您的用戶類型,但您可能已經以某種方式存儲了該字符串,因此請調整以匹配。 如果您已經沒有容易訪問的東西,您可以調整您的適配器的構造函數以獲取額外的參數

例如

class ViewPagerAdapter extends FragmentStatePagerAdapter {
   private String userType;


        ViewPagerAdapter(FragmentManager fm, String userType) {
            super(fm);
            this.userType = userType;
        }
 ......

然后在創建適配器時

mViewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(),"admin");

雖然這可能不是最有效的方法,但很容易展示,您可以使用數據結構來保存用戶類型具有哪些選項卡,並且可能有更優化的組織條件的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM