在Acitivity中添加Fragment

来源:互联网 发布:python新手入门 编辑:程序博客网 时间:2024/06/14 09:20

1、activity_main.xml布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal">    <fragment class="com.example.android5_7.ListFragment" android:id="@+id/titles"android:layout_weight="1" android:layout_width="0px"android:layout_height="match_parent" /></LinearLayout>
class一定要写对

在layout-land目录下创建activity_main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal" >        <fragment         class="com.example.ListFragment"        android:id="@+id/titles"        android:layout_weight="1"        android:layout_width="0px"        android:layout_height="match_parent"/>    <FrameLayout         android:id="@+id/dedetail"        android:layout_weight="2"        android:layout_width="0px"        android:layout_height="match_parent"        android:background="?android:attr/detailsElementBackground"></FrameLayout>    </LinearLayout>
2、创建一个名称为Data的final类

public final class Data {//标题public static final String[] TITLES ={"线性布局","表格布局","帧布局","相对布局"};//详细内容public static final String[] DETAIL = {"线性布局线性布局线性布局线性布局线性布局线性布局线性布局线性布局线性布局线性布局线性布局线性布局","表格布局表格布局表格布局表格布局表格布局表格布局表格布局表格布局表格布局表格布局表格布局表格布局","帧布局帧布局帧布局帧布局帧布局帧布局帧布局帧布局帧布局帧布局帧布局帧布局帧布局帧布局帧布局帧布局","相对布局相对布局相对布局相对布局相对布局相对布局相对布局相对布局相对布局相对布局相对布局相对布局"};}


3、创建一个继承ListFragment的ListFragment类

public class ListFragment extends android.app.ListFragment {boolean dualPane;//是否在同一屏上同时显示列表和详细内容int curCheckPosition = 0;//当前选择的索引位置@Overridepublic void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_checked,Data.TITLES));//为列表设置适配器//获取布局文件中添加的FrameLayout帧布局管理器View detailFrame = getActivity().findViewById(R.id.detail);dualPane = detailFrame!=null&&detailFrame.getVisibility() == View.VISIBLE;//判断是否在一屏上同时显示列表和详细内容if(savedInstanceState!=null){curCheckPosition = savedInstanceState.getInt("curChoice", 0);//更新当前选择的索引位置}if(dualPane){//如果在一屏上同时显示列表和详细内容getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);//设置列表为单选模式showDetails(curCheckPosition);//显示详细内容}}//重写onSaveInstanceState()方法,保存当前选中的列表项的索引值@Overridepublic void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putInt("curChoice", curCheckPosition);}//重写onListItemClick()方法@Overridepublic void onListItemClick(ListView l, View v, int position, long id) {showDetails(position);//调用showDetails()方法显示详细内容}void showDetails(int index){curCheckPosition = index;//更新保存当前索引位置的变量的值为当前选中值if(dualPane){//当在一屏上同时显示列表和详细内容时getListView().setItemChecked(index, true);//设置选中列表项为选中状态DetailFragment details = (DetailFragment)getFragmentManager().findFragmentById(R.id.detail);//获取用于显示详细内容的Fragmentif(details==null||details.getShownIndex()!=index){//创建一个新的DetailFragment实例,用于显示当前选择项对应的详细内容details = DetailFragment.newInstance(index);//要在activity中管理fragment,需要使用FragmentManagerFragmentTransaction ft = getFragmentManager().beginTransaction();//获得一个FragmentTransaction的实例ft.replace(R.id.detail, details);//替换原来显示的详细内容ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);//设置转换效果ft.commit();//提交事务}}else{//在一个屏上只能显示列表或详细内容中的一个内容时Intent intent = new Intent(getActivity(), DetailActivity.class);//创建一个Intent对象intent.putExtra("index", index);//设置一个要传递的参数startActivity(intent);}}}

4、创建一个继承Fragment的DetailFragment,用于显示选中标题对应的详细内容

public class DetailFragment extends Fragment {//创建一个DetailFragment的新实例,其中包括要传递的数据包public static DetailFragment newInstance(int index){DetailFragment f = new DetailFragment();//将index作为一个参数传递Bundle bundle = new Bundle();//实例化一个Bundle对象 bundle.putInt("index", index);//将索引值添加到Bundle对象中f.setArguments(bundle);//将bundle对象作为Fragment的参数保存 return f;}public int getShownIndex(){return getArguments().getInt("index",0);//获取要显示的列表项索引 }@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {if(container == null){return null;}ScrollView scroller = new ScrollView(getActivity());//创建一个滚动视图TextView text = new TextView(getActivity());//创建一个文本框对象text.setPadding(10, 10, 10, 10);//设置内边距scroller.addView(text);//将文本框对象添加到滚动视图中text.setText(Data.DETAIL[getShownIndex()]);//设置文本框中要显示的文本return scroller;}}

5、在MainActivity中创建一个内部类DetailActivity

//创建一个继承Activity的内部类,用于在手机界面中通过Activity显示详细内容    public static class DetailActivity extends Activity{    @Override    protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    //判断是否为横屏,如果为横屏,则结束当前Activity,准备使用Fragment显示详细内容    if(getResources().getConfiguration().orientation==Configuration.ORIENTATION_LANDSCAPE){    finish();//结束当前Activity    return;    }    if(savedInstanceState==null){    //在初始化时插入一个显示详细内容的Fragment    DetailFragment details = new DetailFragment();//实例化DetailFragment的对象    details.setArguments(getIntent().getExtras());//设置要传递的参数    getFragmentManager().beginTransaction().add(android.R.id.content, details).commit();//添加一个显示详细信息的Fragment    }    }    }

6、在AndroidMainFest.xml文件中配置DetailActivity

<activity             android:name=".MainActivity$DetailActivity"            android:label="详细内容"></activity>




0 0
原创粉丝点击