fragment一些经典用法
2015-10-19 10:53
246 查看
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 implements OnCheckedChangeListener { @Override protected 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); } @Override public void onCheckedChanged(RadioGroup group, int checkedId) { Toast.makeText(this, "onCheckedChanged", Toast.LENGTH_SHORT).show(); // 替换fragment // 一般比较粗糙的办法 // 思考:这么干有什么不好的? // 每次都要创建对象---这样的话会导致我们的GC垃圾回收器不断的回收我们的对象 // 所以说我们不能每一次都创建fragment switch (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(); // 先找我们的fragment Fragment 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(); } } // 显示当前选中的fragment List<Fragment> fragments = fragmentManager.getFragments(); // 第一次获取fragment数量为0 if (fragments != null) { for (Fragment fragment2 : fragments) { if (isTabFragment(fragment2)) { // 我们主页面需要fragment if (fragment2.getClass().getSimpleName() .equals(clazz.getSimpleName())) { beginTransaction.show(fragment2); } else { beginTransaction.hide(fragment2); } } } } else { // 等于null的时候我们默认显示第一项 beginTransaction.show(fragment); } beginTransaction.commit(); } // 筛选tab 的fragment private 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; } }整理自教程
相关文章推荐
- Zookeeper源码分析(五)-Zookeeper选举实例流程
- js MD5加密 和 base64编码实现!
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- iOS5中UIViewController的新方法
- 摩尔纹的原理与产生条件
- svn小知识
- HTTP必知必会
- 3个IO口8个按键
- 代码:显示当前系统时间
- Android 中关于 TextView中链接的拦截
- ThreadLocal,静态变量,实例变量,局部变量的线程安全,回复:ByteBuffer 到底怎么用?网络编程中一点总结!
- Java并发编程:volatile关键字解析
- sql server 行转列(转载)
- 黑马程序员--Java学习日记之基础知识(思维导图&基础概念)
- 基于环信和百度地图的一个项目总结
- android.support.v4.widget.SwipeRefreshLayout布局Xml 文件
- 无线路由接入
- 字符串笔试面试题
- 用Maonry如何实现UIScrollView
- android:windowSoftInputMode属性详解