本人新手,第一次写博客,学习android十几天,这几天碰到了fragment的问题。
这个小例子,通过点击不同按钮,加载不同的fragment,fragment的listView公用一个xml文件。
将来的listView将会加载到id为menu的布局里边
两个fragment分别为fragmentA和fragmentP
public class fragmentA extends Fragment{
private static final List airport =Arrays.asList(new String[]{"李四", "王五",
"赵六", "孙七", "刘八" });
ListView lv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragmenta, container, false);
lv = (ListView)view.findViewById(R.id.listView1);
lv.setTextFilterEnabled(true);
lv.setAdapter(new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1,airport));
return view;
}
}
public class fragmentP extends Fragment{
private static final String[] plane = new String[] { "firstP", "secondP",
"thirdP", "fourthP", "fifthP" };
ListView lv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragmenta, container, false);
lv = (ListView)view.findViewById(R.id.listView1);
lv.setAdapter(new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1,plane));
return view;
}
}
mainActivity为:
public class MainActivity extends ActionBarActivity {
Button a, b;
LinearLayout menu;
Animation showAction, hideAction;
boolean menuShowed, menuShowed2;
int index;
FragmentManager fragmentManager = getFragmentManager();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// lv = (ListView) findViewById(R.id.listView1);
a = (Button) findViewById(R.id.first);
b = (Button) findViewById(R.id.second);
menu = (LinearLayout) findViewById(R.id.menu);
showAction = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
1.0f, Animation.RELATIVE_TO_SELF, 0.0f);//listView出现动画
showAction.setDuration(200);//设置listview动画出现的持续时间
menuShowed = true;
menuShowed2 = true;
menu.setVisibility(View.GONE);//list初始化的时候是不显示的
////判断点击按钮a的时候,当前的list是A还是B,是A的话,就要把List关闭,如果是B的话,就要先关闭B再打开A,两个动作
a.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if (menuShowed2 == false) {
b.callOnClick();
}
fragmentA fa = new fragmentA();
FragmentTransaction beginTransaction = fragmentManager
.beginTransaction();
beginTransaction.replace(R.id.menu, fa);
beginTransaction.commit();
if (menuShowed) {
menu.startAnimation(showAction);
menu.setVisibility(View.VISIBLE);
menuShowed = false;
} else {
//暂时把fragment隐藏
beginTransaction.hide(fa);
menuShowed = true;
}
}
});
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if (menuShowed == false) {
a.callOnClick();
}
fragmentP fa = new fragmentP();
FragmentTransaction beginTransaction = fragmentManager
.beginTransaction();
beginTransaction.replace(R.id.menu, fa);
beginTransaction.commit();
if (menuShowed2) {
menu.startAnimation(showAction);
menu.setVisibility(View.VISIBLE);
menuShowed2 = false;
} else {
beginTransaction.hide(fa);
menuShowed2 = true;
}
}
});
}
}