2013-04-18 3 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