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;//当前选择的索引位置
	@Override
	public 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()方法,保存当前选中的列表项的索引值
	@Override
	public void onSaveInstanceState(Bundle outState) {
		super.onSaveInstanceState(outState);
		outState.putInt("curChoice", curCheckPosition);
	}
	//重写onListItemClick()方法
	@Override
	public 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);//获取用于显示详细内容的Fragment
			if(details==null||details.getShownIndex()!=index){
				//创建一个新的DetailFragment实例,用于显示当前选择项对应的详细内容
				details = DetailFragment.newInstance(index);
				//要在activity中管理fragment,需要使用FragmentManager
				FragmentTransaction 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);//获取要显示的列表项索引 
	}
	@Override
	public 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>




更多推荐