Fragment初学4——使用Fragment的子类ListFragment
来源:互联网 发布:cad天正建筑软件 编辑:程序博客网 时间:2024/05/08 08:45
本节介绍一个ListFragment的例子,MainActivity左边显示一个ListFragment,右边是一个FrameLayout容器,该FrameLayout容器将会动态更新其中的Fragment
MainActivity布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<!-- 定义一个水平排列的LinearLayout,并指定使用中等分隔条 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:divider="?android:attr/dividerHorizontal"
android:orientation="horizontal"
android:showDividers="middle" >
<!-- 添加一个Fragment -->
<fragment
android:id="@+id/fragment_list_main"
android:name="com.example.activity.MyListFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<!-- 添加一个FrameLayout容器 -->
<FrameLayout
android:id="@+id/framelayout_content_main"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2" />
</LinearLayout>
<!-- 定义一个水平排列的LinearLayout,并指定使用中等分隔条 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:divider="?android:attr/dividerHorizontal"
android:orientation="horizontal"
android:showDividers="middle" >
<!-- 添加一个Fragment -->
<fragment
android:id="@+id/fragment_list_main"
android:name="com.example.activity.MyListFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<!-- 添加一个FrameLayout容器 -->
<FrameLayout
android:id="@+id/framelayout_content_main"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2" />
</LinearLayout>
MainActivity.java类
public class MainActivity extends Activity implements MyListFragment.Callbacks {
ContentFragment是具体的Fragment类,代码会上传上去
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// 实现Callbacks接口必须实现的方法
public void onItemSelected(Integer id) {
// 创建Bundle,准备向Fragment传入参数
Bundle arguments = new Bundle();
arguments.putInt("id", id);
// 创建ContentFragment对象
ContentFragment fragment = new ContentFragment();
// 向Fragment传入参数
fragment.setArguments(arguments);
// 使用fragment替换framelayout_content_main容器当前显示的Fragment
getFragmentManager().beginTransaction()
.replace(R.id.framelayout_content_main, fragment).commit();
}
}
开发ListFragment的子类无需重写onCreatView()方法,类似ListActivity,只要调用ListFragment的setAdapter()方法为其设置Adapter即可。
MyListFragment.java类
public class MyListFragment extends ListFragment {
private Callbacks mCallbacks;
// 定义一个回调接口,该Fragment所在Activity需要实现该接口
// 该Fragment将通过该接口与它所在的Activity交互
public interface Callbacks {
public void onItemSelected(Integer id);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 为该ListFragment设置Adapter
ArrayAdapter adapter = new ArrayAdapter(getActivity(),
android.R.layout.simple_list_item_1, new String[] {
"DialogFragment", "ListFragment", "WebViewFragment",
"PreferenceFragment" });
setListAdapter(adapter);
}
// 当该Fragment被添加、显示到Activity时,回调该方法
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// 如果Activity没有实现Callbacks接口,抛出异常
if (!(activity instanceof Callbacks)) {
throw new IllegalStateException(
"MyListFragment所在的Activity必须实现Callbacks接口!");
}
// 把该Activity当成Callbacks对象
mCallbacks = (Callbacks) activity;
}
// 当该Fragment从它所属的Activity中被删除时回调该方法
@Override
public void onDetach() {
super.onDetach();
// 将mCallbacks赋为null。
mCallbacks = null;
}
// 当用户点击某列表项时激发该回调方法
@Override
public void onListItemClick(ListView listView, View view, int position,
long id) {
super.onListItemClick(listView, view, position, id);
// 激发mCallbacks的onItemSelected方法
mCallbacks.onItemSelected(position);
}
public void setActivateOnItemClick(boolean activateOnItemClick) {
getListView().setChoiceMode(
activateOnItemClick ? ListView.CHOICE_MODE_SINGLE
: ListView.CHOICE_MODE_NONE);
}
}
源码
源码
0 0
- Fragment初学4——使用Fragment的子类ListFragment
- Fragment初学3——使用Fragment的子类DialogFragment
- Fragment初学5——使用Fragment的子类PreferenceFragment
- Fragment的两个子类ListFragment和DialogFragment的应用Demo
- Fragment初学2——使用Fragment
- Fragment学习之ListFragment的使用
- Android系列之Fragment----ListFragment的使用
- Android Fragment的使用 八 ListFragment
- Android Fragmnet-Fragment数据交换以及ListFragment的使用
- Fragment初学6——Fragment的相关方法
- Fragment初学1——Fragment简介
- Fragment ListFragment相关API
- fragment、ListFragment使用ListView及自定义Listview等初始化操作
- fragment、ListFragment使用ListView及自定义Listview等初始化操作
- fragment、ListFragment使用ListView及自定义Listview等初始化操作
- fragment、ListFragment使用ListView及自定义Listview等初始化操作
- Fragment中添加ListView而不使用ListFragment
- fragment、ListFragment使用ListView及自定义Listview等初始化操作
- css隔行换色和鼠标划过变色
- 最小生成树之克鲁斯卡尔算法 ( java版)
- nexus配置
- ListView学习(一)-ListView使用
- 什么是aidl?Android AIDL详解
- Fragment初学4——使用Fragment的子类ListFragment
- 仲恺acm 1073:2^x mod n = 1【java】
- 如何做好酒店财务管理工作(各部门经理必看)
- Tornado 使用经验【防范 跨站伪造请求CSRF 或 XSRF;2、防止伪造 cookie 】
- JAVA图形界面(GUI)之菜单
- 36项修炼:学习总结
- JS模块化工具requirejs教程(二):基本知识
- AlertDialog(提示对话框)
- JDBC使用方法的封装