2014-02-25 69 views
2

我現在使用3個選項卡,並且我可以很好地交換它們。但是,可以說我在第一個選項卡中進行了一些更改(將內容輸入到文本視圖中),然後轉到第三個選項卡,然後再回來,這些更改消失。這似乎很安靜,因爲在我的代碼中,我基於我的xml佈局文件設置TabFragment的選項卡布局。當我們滑動到不同的標籤頁時,有沒有辦法保存標籤的佈局,以便以後可以切換回此保存的標籤佈局?Android Swipe Tab Action Bar - 在選項卡中進行更改持久

(我觀察到一個有趣的事情是改變堅持不懈,當我第2個標籤之間切換,但每當我去第三個,回來的第一,它們就會消失)

我的主活動文件(我的代碼this answer

public class Tob extends FragmentActivity implements ActionBar.TabListener 
{ 

CollectionPagerAdapter mCollectionPagerAdapter; 
ViewPager mViewPager; 

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mCollectionPagerAdapter = new CollectionPagerAdapter(getSupportFragmentManager()); 

    final ActionBar actionBar = getActionBar(); 
    actionBar.setHomeButtonEnabled(false); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mViewPager.setAdapter(mCollectionPagerAdapter); 
    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() 
    { 
     @Override 

     public void onPageSelected(int position) 
     { 
      actionBar.setSelectedNavigationItem(position); 
     } 

    }); 
    for (int i = 0; i < mCollectionPagerAdapter.getCount(); i++) 
    { 
     actionBar.addTab(actionBar.newTab() 
     .setText(mCollectionPagerAdapter.getPageTitle(i)) 
     .setTabListener(this)); 
    } 

} 

public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) 
{ 
} 

public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) 
{ 
    mViewPager.setCurrentItem(tab.getPosition()); 
} 

public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) 
{ 

} 

public class CollectionPagerAdapter extends FragmentPagerAdapter 
{ 
    final int NUM_ITEMS = 3; // number of tabs 

    public CollectionPagerAdapter(FragmentManager fm) 
    { 
     super(fm);  
    } 

    @Override 

    public Fragment getItem(int i) 
    { 
     Fragment fragment = new TabFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(TabFragment.ARG_OBJECT, i); 
     fragment.setArguments(args); 
     return fragment; 
    } 

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

    @Override 
    public CharSequence getPageTitle(int position) 
    { 
     String tabLabel = null; 
     switch (position) { 
      case 0: 
       tabLabel = "Tab1"; 
       break; 
      case 1: 
       tabLabel = "Tab2"; 
       break; 
      case 2: 
       tabLabel = "Tab3"; 
       break; 

     } 

     return tabLabel; 
    } 
} 

public static class TabFragment extends Fragment 
{ 
    public static final String ARG_OBJECT = "object"; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 

     Bundle args = getArguments(); 
     int position = args.getInt(ARG_OBJECT); 
     int tabLayout = 0; 
     switch (position) 
     { 
      case 0: 
       tabLayout = R.layout.tob1; 
       break; 
      case 1: 
       tabLayout = R.layout.tob2; 
       break; 
      case 2: 
       tabLayout = R.layout.tob3; 
       break; 
     } 

     View rootView = inflater.inflate(tabLayout, container, false); 
     return rootView; 

    } 

} 

我activity_main.xml中的文件:

<android.support.v4.view.ViewPager 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/pager" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".Tob"/> 

tob1.xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/tab1" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@drawable/apppattern" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 

等等。我的直覺是,當切換時我需要保存一個選項卡的佈局,我只是不知道該在哪裏做。

回答

1

交叉發佈:saving data on tabs

,可以使用共享首選項來存儲從標籤中獲取用戶輸入/字符串/數字等。

首先,在你的類中聲明一個SharedPreference名字標籤。

public static final String PREFS_NAME = "Blah"; 

接下來,在你的onTabUnselected方法,所有形式的相關文本數據保存到SharedPreference。

public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) 
{ 
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putString("userText", (TextView)getViewById(R.id.myTextView).getText()); 
    editor.commit(); 
} 

最後,在onTabSelected方法中檢索SharedPreference文本。

public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) 
{ 
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
    String myText = settings.getString("userText", "Default"); 
    ((TextView)getViewById(R.id.myTextView)).setText(myText); 
} 

這裏是原生Android文檔頁面http://developer.android.com/guide/topics/data/data-storage.html您可以保存如字符串元,浮,布爾等使用SharedPreferences。您還可以保存其他資源(如佈局/圖像)的url字符串,然後檢索它們並在tab1中動態創建您的視圖。

+0

好吧,這似乎是一個足夠好的解決方法。任何方式我可以保存整個標籤?基本上,因爲我也在改變各種按鈕的狀態(啓用/禁用),並且處理這麼多對象將是一個真正的痛苦。 – Karan

+0

啊..整個佈局與數據?...我不知道該怎麼做.. –

+0

好的謝謝,我剛剛意識到,因爲我正在處理這些對象,應該沒有問題在使用這些在這些功能。 – Karan