Android——正确的Fragment写法
2017-11-01 16:24
190 查看
Fragment之前用的都是replace来替换,而且切换后台重新进入会直接导致重叠问题,这是因为没有保存fragment状态。
1。用newinstance来创建对应的fragment
2。oncreate根据保存fragment状态来判断展示fragment的呈现
3。onsaveInstance用来保存fragment状态
4。onactivitycreated中获取参数
附完整代码:
1。用newinstance来创建对应的fragment
public static BaseFragment newInstance(String name) { BaseFragment fragment = new BaseFragment(); Bundle args = new Bundle(); args.putString("name", name); fragment.setArguments(args); return fragment; }
2。oncreate根据保存fragment状态来判断展示fragment的呈现
@Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { boolean isSupportHidden = savedInstanceState.getBoolean(STATE_SAVE_IS_HIDDEN); FragmentTransaction ft = getFragmentManager().beginTransaction(); if (isSupportHidden) { ft.hide(this); } else { ft.show(this); } ft.commit(); } }
3。onsaveInstance用来保存fragment状态
@Override public void onSaveInstanceState(Bundle outState) { outState.putBoolean(STATE_SAVE_IS_HIDDEN, isHidden()); }
4。onactivitycreated中获取参数
@Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); String name = getArguments().getString("name"); //fragmentText.setText(name); }
附完整代码:
package com.example.pelon.fragment; import android.content.Context; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.example.pelon.myteacher.R; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; /** * Created by PeLon on 2017/10/31. */ public class BaseFragment extends Fragment { private static final String STATE_SAVE_IS_HIDDEN = "STATE_SAVE_IS_HIDDEN"; @BindView(R.id.fragment_text) TextView fragmentText; Unbinder unbinder; public static BaseFragment newInstance(String name) { BaseFragment fragment = new BaseFragment(); Bundle args = new Bundle(); args.putString("name", name); fragment.setArguments(args); return fragment; } @Override public void onAttach(Context context) { super.onAttach(context); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragmentlayout, null); unbinder = ButterKnife.bind(this, view); return view; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { boolean isSupportHidden = savedInstanceState.getBoolean(STATE_SAVE_IS_HIDDEN); FragmentTransaction ft = getFragmentManager().beginTransaction(); if (isSupportHidden) { ft.hide(this); } else { ft.show(this); } ft.commit(); } } @Override public void onSaveInstanceState(Bundle outState) { outState.putBoolean(STATE_SAVE_IS_HIDDEN, isHidden()); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); String name = getArguments().getString("name"); fragmentText.setText(name); } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); } }
相关文章推荐
- 使用viewpager,actionbar,fragment时正确导入android-support-v4.jar的方法
- Android来电监听,正确的写法
- android fragment清晰启动写法以及在dialog中的应用
- Android横竖屏切换后,重新设置activity布局,ViewPager上无法正确显示Fragment
- Android Studio Git .gitignore文件简洁正确的写法
- Android总结:正确判断当前的Fragment是显示还是隐藏
- Android自定义Seekbar的正确写法
- Android SharedPreferences存储的正确写法
- Android中添加Fragment的正确姿势
- Android中Application单例模式的正确写法
- Android中Fragment多层嵌套时onActivityResult无法正确回调问题的解决方法
- Android - Fragment正确使用方法介绍,setUserVisibleHint方法实现数据懒加载
- android 底部菜单写法之FragmentTabHost
- Android总结:正确判断当前的Fragment是显示还是隐藏
- Android Fragment的标准写法
- Android Fragment的标准写法
- Android FragmentStatePagerAdapter的写法
- android开发:如何正确使用fragment
- Android Fragment完全解析,关于碎片你所需知道的一切
- android-fragment重叠解决方法