这个小例子主要用来实现Fragment的一个重要功能:
Fragment可以弥补activity的使用局限:即不能将多个activity界面在一个屏幕上同时显示
看代码:
MainActivity.java:
1.load设计的layout,其中含两个fragment
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.youkuaiyun.com/detail/null1989/6342785