您的位置:首页 > 其它

FragmentViewPagerAdapter中使用FragmentTabhost 重新生成view解决办法

2014-10-31 10:45 489 查看
引入FragmentTabhost后会再每次切换的时候都重新去生成view,但是一般使用过程不希望每次都加载view影响用户体验,目前发现一种解决办法就是在fragment中缓存view

1.fragment1.java

public class Fragment1 extends Fragment {

TextView msg;

private Activity mContext;

private Context context;

private static View rootView;

public Fragment1() {

// TODO Auto-generated constructor stub

}

public Fragment1(Activity context) {

this.mContext = context;

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

if(rootView==null){

rootView = inflater.inflate(R.layout.fragment1, null);

context = rootView.getContext();

msg = (TextView) rootView.findViewById(R.id.msg);

Log.e("tag","onCreateView Fragment1");

}

ViewGroup parent = (ViewGroup) rootView.getParent();

if (parent!=null){

parent.removeView(rootView);

}

return rootView;

}

2.fragement2.java

public class Fragment2 extends Fragment {

TextView msg;

private Activity mContext;

private View rootView;

private Context context;

public Fragment2() {

// TODO Auto-generated constructor stub

}

public Fragment2(Activity context) {

this.mContext = context;

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

if(rootView==null){

rootView = inflater.inflate(R.layout.fragment2, null);

context = rootView.getContext();

msg = (TextView) rootView.findViewById(R.id.msg);

Log.e("tag","onCreateView Fragment2");

}

ViewGroup parent = (ViewGroup) rootView.getParent();

if (parent!=null){

parent.removeView(rootView);

}

return rootView;

}

public void setMsg(String text) {

msg.setText(text);

}

3.fragment3.java

public class Fragment3 extends Fragment {

TextView msg;

private Activity mContext;

private View rootView;

private Context context;

public Fragment3() {

}

public Fragment3(Activity context) {

this.mContext = context;

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

if(rootView==null){

rootView = inflater.inflate(R.layout.fragment3, null);

context = rootView.getContext();

msg = (TextView) rootView.findViewById(R.id.msg);

Log.e("tag","onCreateView Fragment3");

}

ViewGroup parent = (ViewGroup) rootView.getParent();

if (parent!=null){

parent.removeView(rootView);

}

return rootView;

}

public void setMsg(String text) {

msg.setText(text);

}

4.mainactivity.java

package com.example.fragmenttabhostviewpager;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import com.application.SysApplication;

import com.example.widgets.FragmentViewPagerAdapter;

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.app.FragmentTabHost;

import android.support.v4.view.ViewPager;

import android.support.v4.view.ViewPager.OnPageChangeListener;

import android.util.DisplayMetrics;

import android.view.animation.Animation;

import android.view.animation.TranslateAnimation;

import android.widget.LinearLayout;

import android.widget.RadioButton;

import android.widget.RadioGroup;

import android.widget.RadioGroup.OnCheckedChangeListener;

import android.widget.TabHost.OnTabChangeListener;

import android.widget.TabHost.TabSpec;

import android.widget.ImageView;

public class MainActivity extends FragmentActivity {

private RadioGroup rg;

private RadioButton firstBtn;

private RadioButton secondBtn;

private RadioButton thirdBtn;

private FragmentTabHost mFragmentTabhost;

public static final String SHOW_OF_FIRST_TAG = "first";

public static final String SHOW_OF_SECOND_TAG = "second";

public static final String SHOW_OF_THIRD_TAG = "third";

private int SCREEN_WIDTH;

private float currentX;// 当前X坐标

private float preX;// 前一操作的X坐标

private ImageView mRedlineIV;

private List<Fragment> list = new ArrayList<Fragment>();

private ViewPager mViewPager;

private HashMap<Integer, Fragment> fragments = new HashMap<Integer, Fragment>();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

DisplayMetrics metrics = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(metrics);

SCREEN_WIDTH = metrics.widthPixels;

setContentView(R.layout.activity_main);

SysApplication app = (SysApplication) getApplication();

app.addActivity(this);

mFragmentTabhost = (FragmentTabHost) findViewById(android.R.id.tabhost);

rg = (RadioGroup) findViewById(R.id.tab_rg_menu);

firstBtn = (RadioButton) findViewById(R.id.tab_rb_1);

secondBtn = (RadioButton) findViewById(R.id.tab_rb_2);

thirdBtn = (RadioButton) findViewById(R.id.tab_rb_3);

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

mRedlineIV = (ImageView) findViewById(R.id.tab_menu_red_line);

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(

SCREEN_WIDTH / 3, LinearLayout.LayoutParams.WRAP_CONTENT);

mRedlineIV.setLayoutParams(params);

mRedlineIV.setImageResource(R.drawable.ic_launcher);

mFragmentTabhost.setup(this, getSupportFragmentManager(), R.id.pager);

TabSpec tabSpec0 = mFragmentTabhost.newTabSpec(SHOW_OF_FIRST_TAG)

.setIndicator("0");

TabSpec tabSpec1 = mFragmentTabhost.newTabSpec(SHOW_OF_SECOND_TAG)

.setIndicator("1");

TabSpec tabSpec2 = mFragmentTabhost.newTabSpec(SHOW_OF_THIRD_TAG)

.setIndicator("2");

mFragmentTabhost.addTab(tabSpec0, Fragment1.class, null);

mFragmentTabhost.addTab(tabSpec1, Fragment2.class, null);

mFragmentTabhost.addTab(tabSpec2, Fragment3.class, null);

rg.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override

public void onCheckedChanged(RadioGroup group, int checkedId) {

// TODO Auto-generated method stub

switch (checkedId) {

case R.id.tab_rb_1:

preX = currentX;

currentX = 0;

mFragmentTabhost.setCurrentTabByTag(SHOW_OF_FIRST_TAG);

break;

case R.id.tab_rb_2:

preX = currentX;

currentX = SCREEN_WIDTH * 1 / 3;

mFragmentTabhost.setCurrentTabByTag(SHOW_OF_SECOND_TAG);

break;

case R.id.tab_rb_3:

preX = currentX;

currentX = SCREEN_WIDTH * 2 / 3;

mFragmentTabhost.setCurrentTabByTag(SHOW_OF_THIRD_TAG);

break;

default:

break;

}

Animation translateAnimation = new TranslateAnimation(preX,

currentX, 0, 0);

translateAnimation.setFillAfter(true);

translateAnimation.setDuration(1000);

mRedlineIV.setAnimation(translateAnimation);

}

});

mFragmentTabhost.setOnTabChangedListener(new OnTabChangeListener() {

@Override

public void onTabChanged(String tabId) {

// TODO Auto-generated method stub

int position = mFragmentTabhost.getCurrentTab();

mViewPager.setCurrentItem(position);

}

});

mFragmentTabhost.setCurrentTab(0);

initFragment();

mViewPager.setAdapter(new FragmentViewPagerAdapter(getSupportFragmentManager(),fragments));

mViewPager.setOnPageChangeListener(new ViewPagerListener());

mViewPager.setCurrentItem(0);

}

private void initFragment(){

fragments.put(0, new Fragment1(this));

fragments.put(1, new Fragment2(this));

fragments.put(2, new Fragment3(this));

}

class ViewPagerListener implements OnPageChangeListener {

@Override

public void onPageScrollStateChanged(int arg0) {

}

@Override

public void onPageScrolled(int arg0, float arg1, int arg2) {

}

@Override

public void onPageSelected(int index) {

if (index == 0) {

firstBtn.setChecked(true);

} else if (index == 1) {

secondBtn.setChecked(true);

} else if (index == 2) {

thirdBtn.setChecked(true);

}

mFragmentTabhost.setCurrentTab(index);

mViewPager.setCurrentItem(index);

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐