多个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
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
相关文章推荐
- 通过一个activity打开多个fragment,每个fragment包含一个List
- 在一个页面中显示多个activity
- 一个FragmentActivity多个Fragment的生命周期事件记录
- 在一个页面中显示多个activity
- ViewPager 结合Fragment实现一个Activity里包含多个可滑动的标签页,每个标签页可以有独立的布局及响应。
- 一个activity中有多个fragment的透明状态栏处理
- 在一个页面中显示多个activity
- 一个Activity管理多个Fragment切换
- ViewPager 结合Fragment实现一个Activity里包含多个可滑动的标签页
- Android 开发中,如何将多个程序打包成一个apk文件,但是安装完成后显示多个程序?
- Andriod Fragment---给Activity添加一个Fragment
- 实现启动一个activity但不显示其界面
- android 在待机状态下显示某一个activity
- 如何使ViewPager和其它元素显示在一个Activity里面
- 实现启动一个activity但不显示其界面
- 提供将一个Activity转化为View显示出来
- 一个app,多个入口图标,activity-alias实现多程序入口并显示指定view完成
- 刚打开一个Activity时不显示虚拟键盘
- 在一个Activity中同时显示Video Camera 3D
- 一个winform多个窗体请问怎么弄才不会早任务栏上显示多个,也就是始终只在任务栏上显示一个东西