FrameLayout和Fragment处理Android应用UI布局实例

将Fragment与Layout结合使用,一般都是主Activity以frame填充Activity的方式交互管理Fragment :

1.由于用到getSupportFragmentManager()之类,所以主Activity的extends需为FragmentActivity:

public class MainActivity extends FragmentActivity{ .......... }

2.主Activity的layout(xml文件)中建立多个Frame并定义其Android:id="@+id/XXX"
3.主Activity内操作函数中,由查找id来对这些FrameLayout进行Activity填充:
   添加语句如下

复制代码 代码如下:
   getSupportFragmentManager().beginTransaction().add(R.id.fragment_container2,new NullFrag()).commit();

取得支持Fragment管理()->开始交易()->添加(frame的id , Fragment).交付(); 
   替换语句如下
   getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container2,new NullFrag()).commit();
   取得支持Fragment管理()->开始交易()->替代(frame的id , Fragment).交付();
例:

复制代码 代码如下:
    public void click_btn_flag02(View view){
         getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container2,new MidFrag()).commit();
    }

注:函数参数要用View

下面我们来看实例:

效果图的左边是一个列表,右边是列表item的详情。
先看一下布局文件(layout):

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment class="com.fragment.main.TitlesFragment" android:id="@+id/titles" android:layout_weight="1" android:layout_width="0px" android:layout_height="match_parent" /> <FrameLayout android:id="@+id/details" android:layout_weight="1" android:layout_width="0px" android:layout_height="match_parent" android:background="?android:attr/detailsElementBackground" /> </LinearLayout>

布局文件中使用了fragment标签和FrameLayout标签。Android Fragment使用 中介绍了2中嵌入Fragment的方法,这个实例中都用到,从布局文件看到有了fragment标签,这是一种使用方法,FrameLayout标签将会成为第二种加载fragment的载体view。
        看一下程序实现(com.fragment.main.TitlesFragment):

public class TitlesFragment extends ListFragment { int mCurCheckPosition = 0; int mShownCheckPosition = -1; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_activated_1, Shakespeare.TITLES)); //使用静态数组填充列表 if (savedInstanceState != null) { mCurCheckPosition = savedInstanceState.getInt("curChoice", 0); mShownCheckPosition = savedInstanceState.getInt("shownChoice", -1); } getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); showDetails(mCurCheckPosition); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("curChoice", mCurCheckPosition); outState.putInt("shownChoice", mShownCheckPosition); } @Override public void onListItemClick(ListView l, View v, int position, long id) { showDetails(position); } /** *显示listview item 详情 */ void showDetails(int index) { mCurCheckPosition = index; getListView().setItemChecked(index, true); if (mShownCheckPosition != mCurCheckPosition) { DetailsFragment df = DetailsFragment.newInstance(index); FragmentTransaction ft = getFragmentManager() .beginTransaction(); ft.replace(R.id.details, df); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); mShownCheckPosition = index; } } }

TitlesFragment
TitlesFragment继承自Fragment的子类ListFragment,使用了一个静态数组填充列表,重写了onListItemClick方法,showDetails方法展示ListView item的详情。

DetailsFragment df = DetailsFragment.newInstance(index);//获取详情Fragment的实例 FragmentTransaction ft = getFragmentManager().beginTransaction();//获取FragmentTransaction 实例 ft.replace(R.id.details, df); //使用DetailsFragment 的实例 ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit();//提交

看一下DetailsFragment :

public class DetailsFragment extends Fragment { /** * Create a new instance of DetailsFragment, initialized to * show the text at 'index'. */ public static DetailsFragment newInstance(int index) { DetailsFragment f = new DetailsFragment(); // Supply index input as an argument. Bundle args = new Bundle(); args.putInt("index", index); f.setArguments(args); return f; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) { return null; } ScrollView scroller = new ScrollView(getActivity()); TextView text = new TextView(getActivity()); int padding = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 4, getActivity().getResources() .getDisplayMetrics()); text.setPadding(padding, padding, padding, padding); scroller.addView(text); text.setText(Shakespeare.DIALOGUE[getArguments().getInt("index", 0)]); return scroller; } }

DetailsFragment 中使用newInstance(int index)方法产生DetailsFragment 实例并接受整型参数,重载了onCreateView方法创建view。

时间: 2024-11-13 08:09:23

FrameLayout和Fragment处理Android应用UI布局实例的相关文章

FrameLayout和Fragment处理Android应用UI布局实例_Android

将Fragment与Layout结合使用,一般都是主Activity以frame填充Activity的方式交互管理Fragment : 1.由于用到getSupportFragmentManager()之类,所以主Activity的extends需为FragmentActivity: public class MainActivity extends FragmentActivity{ .......... } 2.主Activity的layout(xml文件)中建立多个Frame并定义其And

Android 动态改变布局实例详解_Android

Android 动态改变布局                最近项目需求,动态的改变布局,为了增加客户体验,尤其是在输入框出现小键盘的时候,为了避免小键盘遮挡APP内容就需要动态改变布局:                 先看下实现效果图: 其实是一个软件的登录界面,初始是第一个图的样子,当软键盘弹出后变为第二个图的样子,因为登录界面有用户名.密码.登录按钮,不这样的话软键盘弹出后会遮住登录按钮(其实之前的实现放到了ScrollView里面,监听软键盘弹出后滚动到底部,软键盘隐藏后滚动到顶部,也

Android 动态改变布局实例详解

Android 动态改变布局 最近项目需求,动态的改变布局,为了增加客户体验,尤其是在输入框出现小键盘的时候,为了避免小键盘遮挡APP内容就需要动态改变布局: 先看下实现效果图: 其实是一个软件的登录界面,初始是第一个图的样子,当软键盘弹出后变为第二个图的样子,因为登录界面有用户名.密码.登录按钮,不这样的话软键盘弹出后会遮住登录按钮(其实之前的实现放到了ScrollView里面,监听软键盘弹出后滚动到底部,软键盘隐藏后滚动到顶部,也是可以的). 最简单的方法就是多加几个冗余的View,根据软键

android主流UI布局

http://www.cnblogs.com/xzuo/archive/2011/11/11/2245546.html Android UI设计技巧 http://www.cnblogs.com/playing/archive/2011/05/17/2048287.html

Android中使用GridView进行应用程序UI布局的教程_Android

0.简介GridView 和 ListView 有共同的父类:AbsListView,因此 GridView 和 ListView 具有一定 的相似性.GridView与ListView的主要区别在于:ListView只是在一个方向上分布:而 GridView则会在两个方向上分布. 与ListView类似的是,GridView也需要通过Adapter来提供显示的数据:开发者既可通 过SimpleAdapter来为GridView提供数据,也可通过开发 BaseAdaptei的子类来为GridVi

Android UI布局问题总结

在做新行程项目期间,遇到了很多关于UI布局的问题,这里总结一部分,都是一些小细节,希望能加深理解,以后少走弯路. 一 页面唤起后view创建完成的时间     Activity的生命周期为下图所示:     Activity在onCreate中使用setContentView()方法中载入xml布局,那么布局中的view是在何时完成创建的呢?在父布局中添加一个TextView,使用getLeft().getRight()方法获取TextView在父布局中的左右边界的位置,打印出来可以看到    

【译】用Fragment创建动态的界面布局(附Android示例代码)

原文链接:Building a Dynamic UI with Fragments   为了在Android上创建一个动态和多视图的用户界面,你需要封装UI控件和模块化Activity的行为,以便于你能够动态修改你的Activity.你可以用Fragment类来创建这些模块,它在某种程度上有点像嵌入型的Activity,它可以定义自己布局和管理自己的生命周期. 当一个fragment可以定义自己的布局,他就可以跟其他的fragment在Activity中实现不同的组合,这样,你就可以为不同的屏幕

使用Fragment来处理Andoird app的UI布局的实例分享_Android

Fragment 的出现一方面是为了缓解 Activity 任务过重的问题,另一方面是为了处理在不同屏幕上 UI 组件的布局问题,而且它还提供了一些新的特性(例如 Retainable)来处理一些在 Activity 中比较棘手的问题.Fragment 拥有和 Activity 一致的生命周期,它和 Activity 一样被定义为 Controller 层的类.有过中大型项目开发经验的开发者,应该都会遇到过 Activity 过于臃肿的情况,而 Fragment 的出现就是为了缓解这一状况,可以

使用Fragment来处理Andoird app的UI布局的实例分享

Fragment 的出现一方面是为了缓解 Activity 任务过重的问题,另一方面是为了处理在不同屏幕上 UI 组件的布局问题,而且它还提供了一些新的特性(例如 Retainable)来处理一些在 Activity 中比较棘手的问题.Fragment 拥有和 Activity 一致的生命周期,它和 Activity 一样被定义为 Controller 层的类.有过中大型项目开发经验的开发者,应该都会遇到过 Activity 过于臃肿的情况,而 Fragment 的出现就是为了缓解这一状况,可以