个人觉得Fragment是一个很灵活的东西,用处很大,特别是在平板上等大屏幕的设备上面用处更大,如果不是很了解Fragment的请看这篇文章http://blog.csdn.net/aomandeshangxiao/article/details/7671533,觉得讲的很详细,不过讲一点,我在在3.0以下的版本不继承Activity,而是继承FragmentActivity,获取FragmentManager用getSupportFragmentManager()代替getFragmentManager().其他的看我推荐的那篇文章就行了,好了,接下来我们先来看看项目的效果(我明明弄得是动态图,怎么没反应呀呀呀)
上面的适合由列表进入详情的情况,我们先看下横竖屏的布局
1.竖屏布局,我们用的是FrameLayout,里面放置两个装Fragment的LinearLayout容器,这样的布局是重点
<FrameLayout 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" >
<!-- 装载列表的Fragment 的容器 -->
<LinearLayout
android:id="@+id/list_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
<!-- 装载详情的Fragment 的容器 -->
<LinearLayout
android:id="@+id/detail_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
</FrameLayout>
2.横屏布局就比较简单,我们在res下新建一个layout-land文件夹,里面放置一个和上面同名的layout
<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" >
<!-- 装载列表的Fragment 的容器 -->
<LinearLayout
android:id="@+id/list_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="2">
</LinearLayout>
<!-- 装载详情的Fragment 的容器 -->
<LinearLayout
android:id="@+id/detail_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
</LinearLayout>
</LinearLayout>
3.新建一个列表Fragment,直接上代码吧,里面只有一个ListView用来显示列表数据
package com.example.fragmentdemo3;
import java.util.ArrayList;
import java.util.List;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentManager.OnBackStackChangedListener;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
/**
* 列表Fragment
* @author mining
*
*/
public class FragmentList extends Fragment {
private List<String> mDataSourceList = new ArrayList<String>();
private List<FragmentTransaction> mBackStackList = new ArrayList<FragmentTransaction>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_list_layout, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//添加数据到ListView
for(int i=0, count=20; i<count; i++){
mDataSourceList.add("列表数据" + i);
}
//列表页面的ListView
ListView listView = (ListView) getActivity().findViewById(R.id.fragment_list);
listView.setAdapter(new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, mDataSourceList));
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//实例化详情Fragment
Fragment detailFragment = new FragmentDetail();
//从列表页面传递需要的参数到详情页面
Bundle mBundle = new Bundle();
mBundle.putString("arg", mDataSourceList.get(position));
detailFragment.setArguments(mBundle);
final FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
//判断手机的横竖屏
Configuration configuration = getActivity().getResources().getConfiguration();
int ori = configuration.orientation;
fragmentTransaction.replace(R.id.detail_container, detailFragment);
if(ori == configuration.ORIENTATION_PORTRAIT){
fragmentTransaction.addToBackStack(null);
}
fragmentTransaction.commit();
}
});
}
/**
*
* @param msg
*/
private void showTost(String msg){
Toast.makeText(getActivity(), msg, Toast.LENGTH_LONG).show();
}
}
4.详情Fragment,实战中我们有时候需要从列表中传递参数到详情页面,我这里传递的是列表的显示数据,这里面也是一个ListView
package com.example.fragmentdemo3;
import java.util.ArrayList;
import java.util.List;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
/**
* 详情Fragment
* @author mining
*
*/
public class FragmentDetail extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_detail_layout, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//获取列表传来的参数
Bundle bundle = getArguments();
String date = bundle.getString("arg");
List<String> list = new ArrayList<String>();
for(int i=0, count=20; i<count; i++){
list.add(date);
}
LinearLayout layout = (LinearLayout) getActivity().findViewById(R.id.detail_container);
ListView listView = (ListView) getActivity().findViewById(R.id.fragment_detail);
listView.setAdapter(new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, list));
Configuration configuration = getActivity().getResources().getConfiguration();
int ori = configuration.orientation;
}
}
5.然后就是Activity,我们动态加载列表Fragment
package com.example.fragmentdemo3;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//列表页面需要显示的Fragment
Fragment listFragment = new FragmentList();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.list_container, listFragment);
fragmentTransaction.commit();
}
}
差不多就是那样子吧,7点了,下班了,哈哈!我吧代码上传,有兴趣的朋友可以下载来看看
代码下载
分享到:
相关推荐
用Fragment实现的横竖屏不一样的布局,详情Android 一个例子来解读Fragment实现横竖屏不同的布局http://blog.csdn.net/xiaanming/article/details/9254749
Android Fragment
android动态创建fragment,横竖屏切换.
各个碎片之前的切换隐藏显示,以及androidPad横竖屏切换的使用demo
android3.0以后利用fragment进行切换
本文实例讲述了Android开发使用Activity嵌套多个Fragment实现横竖屏切换功能的方法。分享给大家供大家参考,具体如下: 一、上图 二、需求 近期项目遇到个横竖屏切换的问题,较为复杂,在此记之。 1、Activity中竖...
Fragment必须被写成可重用的模块,你可以将多个Fragment组合到一个Activity中创建一个多模块界面,也可以在多个Activity中包含同一个Fragment的不同实例,这对于你的界面在不同屏幕尺寸下都能给用户完美的体验至关...
通过使用Fragment来实现VR开发播放器左右分屏实现,用来转载3D模型的是Viodeview。
Activity中嵌套多个Fragment,利用ViewPager实现左右滑动,使用两个Activity实现横竖屏切换案例。横屏与竖屏布局不一样。
不支持html标签 纯android代码 需要配置好java jdk环境,准备工具 android studio
Android解决多个Fragment切换时布局重新实例化问题,并保存当前fragment页面,系统回收后还原之前fragment页面,内附源码及apk,博客:http://blog.csdn.net/fan7983377/article/details/51889269
android平板电脑开发,使用Fragment实现页面的局部跳转,像管理系统一样,点击左边的连接实现右边页面的跳转
Android Fragment的使用。...功能:用一个Activity来管理两个Fragment,并且在其中一个Fragment中,点击按钮,影响到第二个Fragment。Activity中用list来管理Fragment。fragment布局采用垂直排列。
在android 2.x时代,我们可能会地使用ActivityGroup来实现这种,但是随着jelly bean的市场份额超过50%,我们会发现有一种新的组建出现了,它叫Fragment...而这种底部选项卡的风格界面的实现也由ActivityGroup转向了...
通过一个小程序实现了Android的Fragment,有兴趣的可以下载看看
单个Activity 多个Fragment实现微信 Android客户端
主要给大家介绍了Android在Fragment中实现监听触摸事件的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
基于ViewModel 实现 Android Fragment 间信息共享。 例子简单,也是 抠的大神的代码,修改好了之后能跑起来的demo。 希望能给入门者参考。想当初我也是找了 n久 就是找不到合适的demo。 278397935@qq.com