您的位置:首页 > 其它

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;
}
}
整理自教程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: