在Acitivity中添加Fragment
来源:互联网 发布:python新手入门 编辑:程序博客网 时间:2024/06/14 09:20
1、activity_main.xml布局文件
<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" android:orientation="horizontal"> <fragment class="com.example.android5_7.ListFragment" android:id="@+id/titles"android:layout_weight="1" android:layout_width="0px"android:layout_height="match_parent" /></LinearLayout>class一定要写对
在layout-land目录下创建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 class="com.example.ListFragment" android:id="@+id/titles" android:layout_weight="1" android:layout_width="0px" android:layout_height="match_parent"/> <FrameLayout android:id="@+id/dedetail" android:layout_weight="2" android:layout_width="0px" android:layout_height="match_parent" android:background="?android:attr/detailsElementBackground"></FrameLayout> </LinearLayout>2、创建一个名称为Data的final类
public final class Data {//标题public static final String[] TITLES ={"线性布局","表格布局","帧布局","相对布局"};//详细内容public static final String[] DETAIL = {"线性布局线性布局线性布局线性布局线性布局线性布局线性布局线性布局线性布局线性布局线性布局线性布局","表格布局表格布局表格布局表格布局表格布局表格布局表格布局表格布局表格布局表格布局表格布局表格布局","帧布局帧布局帧布局帧布局帧布局帧布局帧布局帧布局帧布局帧布局帧布局帧布局帧布局帧布局帧布局帧布局","相对布局相对布局相对布局相对布局相对布局相对布局相对布局相对布局相对布局相对布局相对布局相对布局"};}
public class ListFragment extends android.app.ListFragment {boolean dualPane;//是否在同一屏上同时显示列表和详细内容int curCheckPosition = 0;//当前选择的索引位置@Overridepublic void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_checked,Data.TITLES));//为列表设置适配器//获取布局文件中添加的FrameLayout帧布局管理器View detailFrame = getActivity().findViewById(R.id.detail);dualPane = detailFrame!=null&&detailFrame.getVisibility() == View.VISIBLE;//判断是否在一屏上同时显示列表和详细内容if(savedInstanceState!=null){curCheckPosition = savedInstanceState.getInt("curChoice", 0);//更新当前选择的索引位置}if(dualPane){//如果在一屏上同时显示列表和详细内容getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);//设置列表为单选模式showDetails(curCheckPosition);//显示详细内容}}//重写onSaveInstanceState()方法,保存当前选中的列表项的索引值@Overridepublic void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putInt("curChoice", curCheckPosition);}//重写onListItemClick()方法@Overridepublic void onListItemClick(ListView l, View v, int position, long id) {showDetails(position);//调用showDetails()方法显示详细内容}void showDetails(int index){curCheckPosition = index;//更新保存当前索引位置的变量的值为当前选中值if(dualPane){//当在一屏上同时显示列表和详细内容时getListView().setItemChecked(index, true);//设置选中列表项为选中状态DetailFragment details = (DetailFragment)getFragmentManager().findFragmentById(R.id.detail);//获取用于显示详细内容的Fragmentif(details==null||details.getShownIndex()!=index){//创建一个新的DetailFragment实例,用于显示当前选择项对应的详细内容details = DetailFragment.newInstance(index);//要在activity中管理fragment,需要使用FragmentManagerFragmentTransaction ft = getFragmentManager().beginTransaction();//获得一个FragmentTransaction的实例ft.replace(R.id.detail, details);//替换原来显示的详细内容ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);//设置转换效果ft.commit();//提交事务}}else{//在一个屏上只能显示列表或详细内容中的一个内容时Intent intent = new Intent(getActivity(), DetailActivity.class);//创建一个Intent对象intent.putExtra("index", index);//设置一个要传递的参数startActivity(intent);}}}
4、创建一个继承Fragment的DetailFragment,用于显示选中标题对应的详细内容
public class DetailFragment extends Fragment {//创建一个DetailFragment的新实例,其中包括要传递的数据包public static DetailFragment newInstance(int index){DetailFragment f = new DetailFragment();//将index作为一个参数传递Bundle bundle = new Bundle();//实例化一个Bundle对象 bundle.putInt("index", index);//将索引值添加到Bundle对象中f.setArguments(bundle);//将bundle对象作为Fragment的参数保存 return f;}public int getShownIndex(){return getArguments().getInt("index",0);//获取要显示的列表项索引 }@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {if(container == null){return null;}ScrollView scroller = new ScrollView(getActivity());//创建一个滚动视图TextView text = new TextView(getActivity());//创建一个文本框对象text.setPadding(10, 10, 10, 10);//设置内边距scroller.addView(text);//将文本框对象添加到滚动视图中text.setText(Data.DETAIL[getShownIndex()]);//设置文本框中要显示的文本return scroller;}}
5、在MainActivity中创建一个内部类DetailActivity
//创建一个继承Activity的内部类,用于在手机界面中通过Activity显示详细内容 public static class DetailActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //判断是否为横屏,如果为横屏,则结束当前Activity,准备使用Fragment显示详细内容 if(getResources().getConfiguration().orientation==Configuration.ORIENTATION_LANDSCAPE){ finish();//结束当前Activity return; } if(savedInstanceState==null){ //在初始化时插入一个显示详细内容的Fragment DetailFragment details = new DetailFragment();//实例化DetailFragment的对象 details.setArguments(getIntent().getExtras());//设置要传递的参数 getFragmentManager().beginTransaction().add(android.R.id.content, details).commit();//添加一个显示详细信息的Fragment } } }
6、在AndroidMainFest.xml文件中配置DetailActivity
<activity android:name=".MainActivity$DetailActivity" android:label="详细内容"></activity>
0 0
- 在Acitivity中添加Fragment
- 在Activity中添加Fragment
- acitivity+fragment切换
- 在fragment中添加上下文菜单
- android: 在fragment中添加actionbar, menu
- 在Activity中静态、动态添加Fragment
- Android在Fragment中嵌套(添加)Fragment
- Android中在xml中静态添加Fragment
- Fragment中添加OptionItem
- Fragment中添加tabs
- fragment中添加pulltorefresh
- android中在fragment画面添加actionbar(标题栏)
- 如何在代码中给Fragment添加主题
- 在Fragment中添加toast事件和intent事件响应
- 在Fragment中添加DataPicker TimePicker 以及 NotificationManager的使用
- Fragment(2)-在Activity中动态添加删除
- 关于在ViewPager中添加Fragment的问题
- Android-Fragment(2)-在Activity中动态添加删除
- 几个简单的数据点平滑处理算法
- SpringMVC+MyBatis
- SpringMVC拦截器(资源和权限管理)
- 学习笔记4: ListView使用总结
- 目标跟踪 Object tracking
- 在Acitivity中添加Fragment
- 脚本工具笔记之自动删除废弃资源
- 样例问题 Example question for A4M33MPV course
- js事件绑定及冒泡、捕获和默认行为处理
- 数据结构--排序-查询-二叉树各种遍历-求深度
- 欢迎使用CSDN-markdown编辑器
- OpenCms for MySql安装
- Support in the Wild: My Biggest Elasticsearch Problem at Scale
- 新生代的梦想