1. 简介:
Android Fragment已经被应用程序大量使用。本篇介绍“在Activity中,左右平均布局fragment”的一种实现方式。
2. 效果图:
3. 源代码:
3.1 activity中的布局文件:
<?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.excelsecu.myfragloadertest.LeftFragment"
android:id="@+id/left_fragment" android:layout_weight="1"
android:layout_width="0px" android:layout_height="match_parent"
/>
<fragment class="com.excelsecu.myfragloadertest.RightFragment"
android:id="@+id/right_fragment" android:layout_weight="1"
android:layout_width="0px" android:layout_height="match_parent"
/>
</LinearLayout>
说明:
(1)顶层布局文件使用LinearLayout,并且是左右排列:
android:orientation="horizontal";
(2)直接在xml中定义两个Fragment的布局,需要设置
android:layout_weight=“1”,平均分割;
3.2 列表item的布局:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:gravity="center_vertical"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:minHeight="?android:attr/listPreferredItemHeightSmall" />
说明:
item只有一个TextView文本。
3.3LeftFragment代码:
package com.excelsecu.myfragloadertest;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.FragmentTransaction;
import android.app.ListFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class LeftFragment extends ListFragment {
boolean mDualPane;
int mCurCheckPosition = 0;
private static String[] array = {
"02-01,", "02-02", "02-03", "02-04", "02-05", "02-06", "02-07",
"02-08","02-09", "02-10", "02-11", "02-12", "02-13", "02-14",
"02-15", "02-16","02-17,", "02-18", "02-19", "02-20", "02-21",
"02-22", "02-23", "02-24","02-25", "02-26", "02-27", "02-28"};
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
System.out.println("Fragment-->onCreate");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
System.out.println("Fragment-->onCreateView");
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
System.out.println("Fragment-->onPause");
}
@Override
public void onStop() {
// TODO Auto-generated method stub
super.onStop();
System.out.println("Fragment-->onStop");
}
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
System.out.println("Fragment-->onAttach");
}
@Override
public void onStart() {
// TODO Auto-generated method stub
super.onStart();
System.out.println("Fragment-->onStart");
}
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
System.out.println("Fragment-->onResume");
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("Fragment-->onDestroy");
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
System.out.println("Fragment-->onActivityCreted");
setListAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, array));
View detailsFrame = getActivity().findViewById(R.id.details);
mDualPane = detailsFrame != null
&& detailsFrame.getVisibility() == View.VISIBLE;
if (savedInstanceState != null) {
mCurCheckPosition = savedInstanceState.getInt("curChoice", 0); // 从保存的状态中取出数据
}
if (mDualPane) {
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
showDetails(mCurCheckPosition);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
outState.putInt("curChoice", mCurCheckPosition);// 保存当前的下标
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
showDetails(position);
}
void showDetails(int index) {
mCurCheckPosition = index;
if (mDualPane) {
getListView().setItemChecked(index, true);
DetailsFragment details = (DetailsFragment) getFragmentManager()
.findFragmentById(R.id.details);
if (details == null || details.getShownIndex() != index) {
details = DetailsFragment.newInstance(mCurCheckPosition);
// 得到一个fragment 事务(类似sqlite的操作)
FragmentTransaction ft = getFragmentManager()
.beginTransaction();
ft.replace(R.id.details, details);// 将得到的fragment
// 替换当前的viewGroup内容,add则不替换会依次累加
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);// 设置动画效果
ft.commit();// 提交
}
} else {
new AlertDialog.Builder(getActivity()).setTitle(
android.R.string.dialog_alert_title).setMessage(
MyFragmentDemoActivity.array[index]).setPositiveButton(android.R.string.ok,
null).show();
}
}
}
说明:
(1)继承自ListFragment;
(2)array定义了数据;
(3)setListAdapter:适配器,用于将数据和ui进行绑定;
(4)onListItemClick:点击iteml时会调用这个方法;
(5)onActivityCreated:Fragment生命周期管理相关的一个方法,当Actiivty被创建后,这个方法会被调用。
3.4RightFragment代码:
同“LeftFragment”,只是数据array不一样。