Fragment(複数のactivityインタフェースを1画面に同時に表示)sample

4988 ワード

この小さな例は主にFragmentの重要な機能を実現するために使用されます.
Fragmentはactivityの使用限界を補うことができる:すなわち、複数のactivityインタフェースを1つの画面に同時に表示できない
コードを見てください:
MainActivity.java: 
1.load設計のlayout、fragmentが2つ含まれる
2.titlefragmentをロードする前に
package com.example.myfragment;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//fragment   layout 
		setContentView(R.layout.activity_main);

		// title ListFragment
		TitlesFragment titleFragment = new TitlesFragment();
		this.getFragmentManager().beginTransaction()
				.add(titleFragment, "title").commit();
	}
}

レイアウトファイル:layout_Weightの目的はスクリーン幅を均等に分けることです
FrameLayoutはdetailsfragmentをロードしたviewキャリアですね~~~
ps:このレイアウトでは、インタフェース全体が空白の代替領域として扱われ、すべてのサブ要素が配置された位置を指定できません.これらはすべてこの領域の左上隅に配置され、後ろのサブ要素は直接前のサブ要素の上に覆われ、前のサブ要素の部分とすべてを遮蔽します.
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
        android:id="@+id/titles"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        class="com.example.myfragment.TitlesFragment" />

    <FrameLayout
        android:id="@+id/details"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1" />

</LinearLayout>

TitlesFragment.java
あるitemをクリックするとdetailsFragmentがロードされます
package com.example.myfragment;

import android.app.ListFragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class TitlesFragment extends ListFragment {
	private String[] mString = { "0", "1", "2" };

	// Provide default implementation to return a simple list view.
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		return super.onCreateView(inflater, container, savedInstanceState);
	}

	@Override
	public void onViewCreated(View view, Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onViewCreated(view, savedInstanceState);
	}

	@Override
	public void onDestroyView() {
		// TODO Auto-generated method stub
		super.onDestroyView();
	}

	@Override
	public void onListItemClick(ListView l, View v, int position, long id) {
		// TODO Auto-generated method stub
		super.onListItemClick(l, v, position, id);
		Log.i("FragmentList", "Item clicked: " + id);

		DetailsFragment detailsFragment = (DetailsFragment) getActivity()
				.getFragmentManager().findFragmentById(R.id.details);
		detailsFragment = DetailsFragment.newInstance(position);

		getActivity().getFragmentManager().beginTransaction()
				.replace(R.id.details, detailsFragment).commit();
	}

	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		super.onActivityCreated(savedInstanceState);
		ArrayAdapter arrayAdapter = new ArrayAdapter<String>(getActivity(),
				android.R.layout.simple_list_item_1, mString);
		setListAdapter(arrayAdapter);

	}
}

DetailsFragment.java
package com.example.myfragment;

import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class DetailsFragment extends Fragment {
	private static int mIndex;

	//Fragment , setArguments
	public static DetailsFragment newInstance(int index) {
		Log.d("FragmentList", "DetailsFragment newInstance");
		mIndex = index;
		DetailsFragment details = new DetailsFragment();
		Bundle args = new Bundle();
		args.putInt("index", index);
		details.setArguments(args);
		Log.d("FragmentList", "index :"
				+ details.getArguments().getInt("index"));
		return details;
	}

	// view ,layout <FrameLayout> view 
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		Log.d("FragmentList", "DetailsFragment onCreateView");
		if (container == null)
			return null;

		TextView tv = new TextView(getActivity());
		tv.setText("details: " + mIndex);
		return tv;
		
	}
}

ダウンロードコード:http://download.csdn.net/detail/null1989/6342785