fragment一些经典用法

来源:互联网 发布:知轩藏书电脑版 编辑:程序博客网 时间:2024/06/13 12:25
mport java.util.List;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.FragmentTransaction;import android.widget.RadioGroup;import android.widget.Toast;import android.widget.RadioGroup.OnCheckedChangeListener;import com.tz.dream.fragment.tabbar.fragment.BaseFragment;import com.tz.dream.fragment.tabbar.fragment.MainFragment;import com.tz.dream.fragment.tabbar.fragment.MeFragment;import com.tz.dream.fragment.tabbar.fragment.MoreFragment;import com.tz.dream.fragment.tabbar.fragment.PointFragment;public class MainActivity extends FragmentActivity implementsOnCheckedChangeListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView() {RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radio_group);radioGroup.setOnCheckedChangeListener(this);// 如果调用了此方法那么onCheckedChanged会调用两次radioGroup.check(R.id.rb_main);}@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {Toast.makeText(this, "onCheckedChanged", Toast.LENGTH_SHORT).show();// 替换fragment// 一般比较粗糙的办法// 思考:这么干有什么不好的?// 每次都要创建对象---这样的话会导致我们的GC垃圾回收器不断的回收我们的对象// 所以说我们不能每一次都创建fragmentswitch (checkedId) {case R.id.rb_main:show(MainFragment.class);// beginTransaction.add(arg0, arg1)// beginTransaction.remove(arg0)// beginTransaction.show(arg0)// beginTransaction.hide(arg0)// beginTransaction.replace(R.id.fl, new MainFragment());// beginTransaction.commit();break;case R.id.rb_me:show(MeFragment.class);// beginTransaction.replace(R.id.fl, new MeFragment());// beginTransaction.commit();break;case R.id.rb_point:show(PointFragment.class);// beginTransaction.replace(R.id.fl, new PointFragment());// beginTransaction.commit();break;case R.id.rb_more:show(MoreFragment.class);// beginTransaction.replace(R.id.fl, new MoreFragment());// beginTransaction.commit();break;default:break;}}/** * 显示fragment 在这里我的fragment的tag都是我们的类名 *  * @param clazz */private void show(Class<? extends BaseFragment> clazz) {FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction beginTransaction = fragmentManager.beginTransaction();// 先找我们的fragmentFragment fragment = fragmentManager.findFragmentByTag(clazz.getSimpleName());if (fragment == null) {try {fragment = clazz.newInstance();beginTransaction.add(R.id.fl, fragment, fragment.getClass().getSimpleName());} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}// 显示当前选中的fragmentList<Fragment> fragments = fragmentManager.getFragments();// 第一次获取fragment数量为0if (fragments != null) {for (Fragment fragment2 : fragments) {if (isTabFragment(fragment2)) {// 我们主页面需要fragmentif (fragment2.getClass().getSimpleName().equals(clazz.getSimpleName())) {beginTransaction.show(fragment2);} else {beginTransaction.hide(fragment2);}}}} else {// 等于null的时候我们默认显示第一项beginTransaction.show(fragment);}beginTransaction.commit();}// 筛选tab 的fragmentprivate boolean isTabFragment(Fragment fragment) {String fragmentTag = fragment.getClass().getSimpleName();if (fragmentTag.equals(MainFragment.class.getSimpleName())|| fragmentTag.equals(MeFragment.class.getSimpleName())|| fragmentTag.equals(PointFragment.class.getSimpleName())|| fragmentTag.equals(MoreFragment.class.getSimpleName())) {return true;}return false;}}
整理自教程
0 0