您的位置:首页 > 其它

多个fragment在同一个activity中显示

2014-11-17 10:26 447 查看
这个小例子主要用来实现Fragment的一个重要功能:

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

看代码:

MainActivity.java:

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

2. 先加载titlefragment

[java] view
plaincopy

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

[html] view
plaincopy

<?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

[java] view
plaincopy

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

[java] view
plaincopy

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: