2013-04-18 56 views
4

我正在嘗試使用多個選項卡進行應用。對於每個標籤,我使用不同的片段。當我瀏覽標籤頁時,其中的信息正在發生變化。Android可滾動選項卡+滑動時刷卡狀態

如何在保存滑動時保存每個選項卡的狀態?

代碼例如:

MainActivity.java

package com.tabs.example; 

import java.util.Locale; 

import android.graphics.Color; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.PagerTabStrip; 
import android.support.v4.view.ViewPager; 

public class MainActivity extends FragmentActivity { 

    SectionsPagerAdapter mSectionsPagerAdapter; 
    ViewPager   mViewPager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

     mViewPager = (ViewPager) findViewById(R.id.pager); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 

     PagerTabStrip pagerTabStrip = (PagerTabStrip) findViewById(R.id.pager_tab_strip); 
     pagerTabStrip.setBackgroundColor(Color.BLACK); 
     pagerTabStrip.setTabIndicatorColor(Color.CYAN); 
     pagerTabStrip.setTextColor(Color.WHITE); 
    } 

    public class SectionsPagerAdapter extends FragmentPagerAdapter { 

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

     @Override 
     public Fragment getItem(int position) { 

      Fragment fragment; 
      switch (position) { 
       case 0: 
        fragment = new Fragment1(); 
        break; 
       case 1: 
        fragment = new Fragment2(); 
        break; 
       case 2: 
        fragment = new Fragment3(); 
        break; 
       default: 
        fragment = null; 
        break; 
      } 
      return fragment; 

     } 

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

     @Override 
     public CharSequence getPageTitle(int position) { 
      Locale l = Locale.getDefault(); 
      switch (position) { 
       case 0: 
        return getString(R.string.title_section1).toUpperCase(l); 
       case 1: 
        return getString(R.string.title_section2).toUpperCase(l); 
       case 2: 
        return getString(R.string.title_section3).toUpperCase(l); 
      } 
      return null; 
     } 
    } 
} 

Fragment1.java

package com.tabs.example; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class Fragment1 extends Fragment { 

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

     View root = inflater.inflate(R.layout.fragment1, container, false); 

     DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 
     Date date = new Date(); 
     String time = dateFormat.format(date); 

     TextView tv1 = (TextView) root.findViewById(R.id.tv1); 
     tv1.setText(time); 

     return root; 

    } 
} 

Fragment2.java

package com.tabs.example; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class Fragment2 extends Fragment { 

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

     View root = inflater.inflate(R.layout.fragment2, container, false); 

     DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 
     Date date = new Date(); 
     String time = dateFormat.format(date); 

     TextView tv2 = (TextView) root.findViewById(R.id.tv2); 
     tv2.setText(time); 

     return root; 

    } 
} 

Fragment3.java

package com.tabs.example; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class Fragment3 extends Fragment { 

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

     View root = inflater.inflate(R.layout.fragment3, container, false); 

     DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 
     Date date = new Date(); 
     String time = dateFormat.format(date); 

     TextView tv3 = (TextView) root.findViewById(R.id.tv3); 
     tv1.setText(time); 

     return root; 

    } 
} 
+0

你所說的保存狀態是什麼意思?您可以像下面這樣設置ViewPagerAdapter來緩存它們:mViewPager.setOffscreenPageLimit(3); – wangyif2

+0

我想要刷到第三個標籤並回到第一次舉行和那裏,並在那裏。而且,當你改變屏幕方向時,一切仍然像變化之前一樣。 可能是我非常想要的?))) –

+0

mViewPager.setOffscreenPageLimit(3);我會稍後再試,謝謝 –

回答

5

您可以通過設置ViewPagerAdapter這樣緩存它們全部:

mViewPager.setOffscreenPageLimit(3); 
+0

我想在標籤上添加標題部分,我應該怎麼做? – Araju