ListFragment

来源:互联网 发布:大型网络3d手机游戏 编辑:程序博客网 时间:2024/05/20 20:00
package com.example.tyxiong.myapplication;import android.app.Activity;import android.app.FragmentTransaction;import android.app.ListFragment;import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.EditText;import java.util.ArrayList;/** Fragment 概述:*       1.有自己的生命周期,可以接收自己的事件*       2 必须嵌入到Activity中使用,*       3 只有当所在的Activity处理于运行状态时,才可独立的操作Fragment*     设计初衷是为了平板大屏.**     四个特征:*       1 Fragment可方法getActivity()获得其所在的Activity;Activity也可调用FragmentManager的findFragmentById()*       方法获得其拥有的Fragment.*       2 Activity可调用FragmentManager的add() replace() remove()方法动态的添加删除Fragment*       3 一个Activity可嵌入多个Fragment; 同时一个Fragment也可被多个Activity复用*       4 Fragment有自己的生命周期.**    Fragment常用有4个子类 DialogFragment ListFragment PreferenceFragment WebViewFragment**    1 创建Fragment,同样需要继承Fragment或子类.*    2实现方法 如onCreate()实例化Fragment回调,可初始化一些;*        onCreateView()Fragment绘制界面时回调,该方法必须返回一个View也是作为该Fragment的显示组件.*** 如ListFragment 则无需重写onCreateView()方法,设置Adapter提供列表项内容即可*添加Fragment:两种方式 xml javaxml: 把Fragment当成一个普通组件一样添加到Activity的布局文件中,<fragment子元素>主要属性name 全包名.java方式:3步.        1创建Fragment子类实例.        2利用FragmentManager的add() replace()方法加入        3submit() Activity--->Fragment传输数据(同样利用Bundle) 6步 1创建Fragment实例     2创建Bundle     3调用setArgument()设置参数.     4利用FragmentManager的add() replace()加入Fragment     5提交     6Fragment那边调用getArgument()取出数据. Fragment--->Activity    方法:在Fragment定义时,定义一个内部接口;让Fragment的Activity来实现接口,这样Fragment可调用接口方法将数据传给Activity.Fragment生命周期>>>    4个状态11个生命周期方法onAttach()-->onCreate()-->onCreateView()-->onActivityCreated()-->onStart()-->onResume()-->onPause()-->        onStop()-->onDetach()-->onDestroyView()-->onDestroy()* FragmentManager有4个功能.* 1 Activity借助FragmentManager的findFragmentById()获取其上的Fragment* 2 FragmentManager的popBackStack()方法可将Fragment从后台栈弹出(模拟用户按的BACK键)* 3 调用addOnBackStackChangeListener()注册监听器,可监听后台栈变化.* 4 借助FragmentTransaction对象的add() replace() remove() 可动态删除 添加Fragment** FragmentManager 管理* FragmentTransaction(Fragment事务) * * FragmentTransaction=FragmentManager.beginTransaction(); * * Transaction事务,replace() add() 后来 调用addToBackStack(null)将事务添加到BAck栈,用户按BACK会回到替换之前. * 以下演示...* */以下代码演示了 java方式添加Fragment  Activity--->Fragment传数据  ???问题来了,只能在add() repace()时才能传给Fragment参数么...*/public class MainActivity extends Activity  {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Bundle bundle = new Bundle();        ArrayList<String> list_data = new ArrayList<>();        for (int i = 0; i < 3; i++) {            list_data.add("第" + i + "列");        }        bundle.putStringArrayList("BUNDLE", list_data);        FirstFragment firstFrag = new FirstFragment();//java代码添加Fragment方式        firstFrag.setArguments(bundle);        FragmentTransaction fragTransaction = getFragmentManager().beginTransaction();    fragTransaction.add(R.id.linearLay, firstFrag, "FIRST_FRAG");        fragTransaction.addToBackStack(null).commit();//添加Fragment//也可用replace()...效果    }}class FirstFragment extends ListFragment {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Bundle bundle = getArguments();        ArrayList<String> list_data = bundle.getStringArrayList("BUNDLE");        assert list_data != null;        setListAdapter(new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, list_data));    }}
0 0
原创粉丝点击