点击切换fragment
1.给listview设置条目点击事件
//给listview设置条目点击事件
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Log.i("JAVA","第"+position+"个条目被点击");
}
});
2.创建各个fragment
//每个fragment中都要去显示布局,填充数据,相同的抽取到父类
public class Fragment0 extends BaseFragment {
}
3.创建baseFragment,同时各fragemnt继承baseFragment
public class BaseFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
TextView textView = new TextView(getActivity());
//.getSimpleName() : 获取一个类的短类名,不包含包名的类型
//baseFragment = new Fragment0(); this : fragment0
textView.setText("baseFragment");
return textView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
}
}
4.在条目点击事件中实现切换操作
//给listview设置条目点击事件
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Log.i("JAVA","第"+position+"个条目被点击");
//切换条目对应的fragment
//多态操作,父类引用中保存的子类对象
BaseFragment baseFragment = null;
switch (position) {
case 0:
//切换到fragment0
//1.获取fragment0
baseFragment = new Fragment0();
break;
case 1:
//切换到fragment1
//1.获取fragment0
baseFragment = new Fragment1();
break;
case 2:
//切换到fragment2
//1.获取fragment0
baseFragment = new Fragment2();
break;
case 3:
//切换到fragment3
//1.获取fragment0
baseFragment = new Fragment3();
break;
case 4:
//切换到fragment4
//1.获取fragment0
baseFragment = new Fragment4();
break;
}
//2.将fragment0填充到Mainactivity内容页中
switchFragment(baseFragment);
}
});
switchFragment方法
/**
* 切换fragment操作
* @param fragment0
*/
private void switchFragment(BaseFragment baseFragment) {
//2.1获取fragment管理者
getActivity().getSupportFragmentManager()
.beginTransaction().replace(R.id.content, baseFragment, "HOME").commit();
}
5.修改baseFragment中数据显示方式
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
TextView textView = new TextView(getActivity());
//.getSimpleName() : 获取一个类的短类名,不包含包名的类型
//baseFragment = new Fragment0(); this : fragment0
textView.setText(this.getClass().getSimpleName());
return textView;
}
将切换fragment操作移植到Mainactivity
1.在MainActivity中创建切换fragment操作
/**
* 切换fragment操作
* @param baseFragment
*/
public void switchFragment(BaseFragment baseFragment) {
if (baseFragment!=null) {
getSupportFragmentManager()
.beginTransaction().replace(R.id.content, baseFragment, "HOME").commit();
}
}
2.在MenuFragment中的切换fragment方法中调用
/**
* 切换fragment操作
* @param fragment0
*/
private void switchFragment(BaseFragment baseFragment) {
//2.1获取fragment管理者
/*getActivity().getSupportFragmentManager()
.beginTransaction().replace(R.id.content, baseFragment, "HOME").commit();*/
//调用Mainactivity中的switchFragment
//1.判断getactivity是否是Mainactivity
if (getActivity() instanceof MainActivity) {
((MainActivity)getActivity()).switchFragment(baseFragment);
}
}