多个fragment在同一个activity中显示

这个小例子主要用来实现Fragment的一个重要功能:

Fragment可以弥补activity的使用局限:即不能将多个activity界面在一个屏幕上同时显示


看代码:

MainActivity.java: 

1.load设计的layout,其中含两个fragment

2. 先加载titlefragment

[java]  view plain copy
  1. package com.example.myfragment;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5.   
  6. public class MainActivity extends Activity {  
  7.   
  8.     @Override  
  9.     protected void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.         //fragment  在layout里面定义  
  12.         setContentView(R.layout.activity_main);  
  13.   
  14.         //加载title这个ListFragment  
  15.         TitlesFragment titleFragment = new TitlesFragment();  
  16.         this.getFragmentManager().beginTransaction()  
  17.                 .add(titleFragment, "title").commit();  
  18.     }  
  19. }  

布局文件:layout_weight的目的是让它们均分屏幕宽度

FrameLayout是加载detailsfragment的view载体哈~~~

ps:在这个布局中,整个界面被当成一块空白备用区域,所有的子元素都不能被指定放置的位置,它们统统放于这块区域的左上角,并且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和全部遮挡

activity_main.xml

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="horizontal" >  
  6.   
  7.     <fragment  
  8.         android:id="@+id/titles"  
  9.         android:layout_width="0dp"  
  10.         android:layout_height="match_parent"  
  11.         android:layout_weight="1"  
  12.         class="com.example.myfragment.TitlesFragment" />  
  13.   
  14.     <FrameLayout  
  15.         android:id="@+id/details"  
  16.         android:layout_width="0dp"  
  17.         android:layout_height="match_parent"  
  18.         android:layout_weight="1" />  
  19.   
  20. </LinearLayout>  


TitlesFragment.java

点击某个item时,加载detailsFragment

[java]  view plain copy
  1. package com.example.myfragment;  
  2.   
  3. import android.app.ListFragment;  
  4. import android.os.Bundle;  
  5. import android.util.Log;  
  6. import android.view.LayoutInflater;  
  7. import android.view.View;  
  8. import android.view.ViewGroup;  
  9. import android.widget.ArrayAdapter;  
  10. import android.widget.ListView;  
  11.   
  12. public class TitlesFragment extends ListFragment {  
  13.     private String[] mString = { "0""1""2" };  
  14.   
  15.     // Provide default implementation to return a simple list view.  
  16.     @Override  
  17.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  18.             Bundle savedInstanceState) {  
  19.         return super.onCreateView(inflater, container, savedInstanceState);  
  20.     }  
  21.   
  22.     @Override  
  23.     public void onViewCreated(View view, Bundle savedInstanceState) {  
  24.         // TODO Auto-generated method stub  
  25.         super.onViewCreated(view, savedInstanceState);  
  26.     }  
  27.   
  28.     @Override  
  29.     public void onDestroyView() {  
  30.         // TODO Auto-generated method stub  
  31.         super.onDestroyView();  
  32.     }  
  33.   
  34.     @Override  
  35.     public void onListItemClick(ListView l, View v, int position, long id) {  
  36.         // TODO Auto-generated method stub  
  37.         super.onListItemClick(l, v, position, id);  
  38.         Log.i("FragmentList""Item clicked: " + id);  
  39.   
  40.         DetailsFragment detailsFragment = (DetailsFragment) getActivity()  
  41.                 .getFragmentManager().findFragmentById(R.id.details);  
  42.         detailsFragment = DetailsFragment.newInstance(position);  
  43.   
  44.         getActivity().getFragmentManager().beginTransaction()  
  45.                 .replace(R.id.details, detailsFragment).commit();  
  46.     }  
  47.   
  48.     @Override  
  49.     public void onActivityCreated(Bundle savedInstanceState) {  
  50.         super.onActivityCreated(savedInstanceState);  
  51.         ArrayAdapter arrayAdapter = new ArrayAdapter<String>(getActivity(),  
  52.                 android.R.layout.simple_list_item_1, mString);  
  53.         setListAdapter(arrayAdapter);  
  54.   
  55.     }  
  56. }  

DetailsFragment.java

[java]  view plain copy
  1. package com.example.myfragment;  
  2.   
  3. import android.app.Fragment;  
  4. import android.os.Bundle;  
  5. import android.util.Log;  
  6. import android.view.LayoutInflater;  
  7. import android.view.View;  
  8. import android.view.ViewGroup;  
  9. import android.widget.TextView;  
  10.   
  11. public class DetailsFragment extends Fragment {  
  12.     private static int mIndex;  
  13.   
  14.     //Fragment一定要有构造函数,要setArguments  
  15.     public static DetailsFragment newInstance(int index) {  
  16.         Log.d("FragmentList""DetailsFragment newInstance");  
  17.         mIndex = index;  
  18.         DetailsFragment details = new DetailsFragment();  
  19.         Bundle args = new Bundle();  
  20.         args.putInt("index", index);  
  21.         details.setArguments(args);  
  22.         Log.d("FragmentList""index :"  
  23.                 + details.getArguments().getInt("index"));  
  24.         return details;  
  25.     }  
  26.   
  27.     //只要返回view就可以了,layout里的<FrameLayout>是这个view的载体哦  
  28.     @Override  
  29.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  30.             Bundle savedInstanceState) {  
  31.         // TODO Auto-generated method stub  
  32.         Log.d("FragmentList""DetailsFragment onCreateView");  
  33.         if (container == null)  
  34.             return null;  
  35.   
  36.         TextView tv = new TextView(getActivity());  
  37.         tv.setText("details: " + mIndex);  
  38.         return tv;  
  39.           
  40.     }  
  41. }  

下载代码: http://download.csdn.net/detail/null1989/6342785
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Activity显示多个Fragment,可以通过以下步骤实现: 1. 定义多个Fragment类,实现onCreateView方法,返回Fragment的布局。 ```java public class MyFragment1 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_my1, container, false); return view; } } public class MyFragment2 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_my2, container, false); return view; } } ``` 2. 在Activity的布局添加多个Fragment的容器。 ```xml <LinearLayout android:id="@+id/fragment_container1" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"/> <LinearLayout android:id="@+id/fragment_container2" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"/> ``` 3. 在Activity通过FragmentManager动态添加多个Fragment。 ```java public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取FragmentManager FragmentManager fragmentManager = getSupportFragmentManager(); // 开始Fragment事务1 FragmentTransaction transaction1 = fragmentManager.beginTransaction(); // 添加Fragment1到容器1 MyFragment1 fragment1 = new MyFragment1(); transaction1.add(R.id.fragment_container1, fragment1); // 提交事务1 transaction1.commit(); // 开始Fragment事务2 FragmentTransaction transaction2 = fragmentManager.beginTransaction(); // 添加Fragment2到容器2 MyFragment2 fragment2 = new MyFragment2(); transaction2.add(R.id.fragment_container2, fragment2); // 提交事务2 transaction2.commit(); } } ``` 通过以上代码,即可在Activity动态显示多个Fragment的UI界面。需要注意的是,每个Fragment需要对应一个独立的容器,并且在添加Fragment时需要使用不同的事务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值