FragmentViewPagerAdapter中使用FragmentTabhost 重新生成view解决办法
来源:互联网 发布:matlab怎么编程言 编辑:程序博客网 时间:2024/06/15 04:30
引入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);
}
}
}
- FragmentViewPagerAdapter中使用FragmentTabhost 重新生成view解决办法
- 【FragmentTabHost】FragmentTabHost的使用
- Android中使用FragmentTabHost实现底部导航
- FragmentTabHost 使用;
- FragmentTabHost使用
- FragmentTabHost使用
- ViewPager+FragmentTabhost 解决办法
- 对于c#中,在完成自定义用户控件然后重新生成无效的可能解决办法。
- 重写FragmentTabHost,防止FragmentTabHost切换fragment重新调用onCreateView()
- FragmentTabHost使用过程中常见的一个错误
- Appfuse中使用appgen自动生成代码InvocationTargetException的解决办法
- FragmentTabHost的使用
- FragmentTabHost的使用
- fragmentTabHost的使用
- 使用FragmentTabhost代替Tabhost
- Android FragmentTabHost使用
- FragmentTabHost的使用
- android FragmentTabHost的使用
- hdu-1004
- MySQL今天突然无法启动服务,报错1067进程意外终止的解决方案
- ReadMe
- VS2010+OpenCV2.3.1环境下使用tbb加速示例
- CentOS–FTP安装与配置
- FragmentViewPagerAdapter中使用FragmentTabhost 重新生成view解决办法
- 【HDU】2089 不要62 数位DP
- ATL 中调用ConvertBSTRToString报错无法解析的外部符号 "char * __stdcall _com_util::ConvertBSTRToString(wchar_t *)
- 【转】GPMC与FPGA的通信
- nyoj-254
- SSH框架之Struts(2)——Struts的运行流程之配置文件
- rails render partial 参数 变量说明
- 图片怎样转换成PDF的
- 五大看点,首届世界互联网大会,乌镇见!