通过一个activity打开多个fragment,每个fragment包含一个List

本文展示如何在Android应用中通过一个Activity来切换不同的Fragment,每个Fragment内部包含一个ListView。所有ListView都使用相同的XML布局文件,并且详细说明了如何将ListView加载到指定的布局区域,如id为'menu'的视图。示例中涉及到的Fragment分别为fragmentA和fragmentP。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人新手,第一次写博客,学习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;
				}

			}

		});
	}

}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值