zoukankan      html  css  js  c++  java
  • fragment 与activity通信 Bundle 序列化数据 Serializable

    1、fragment简单套用(静态调用):

    新建一个fragment,其xml文件如下:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent"  
        android:background="#00ff00" >  
      
        <TextView  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:text="This is fragment 1"  
            android:textColor="#000000"  
            android:textSize="25sp" />  
      
    </LinearLayout>  

    其java文件如下:

     public class Fragment1 extends Fragment {  
        @Override  
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  
            return inflater.inflate(R.layout.fragment1, container, false);  
        }  
    } 

    在主Activity的布局中加入:

        <fragment  
            android:id="@+id/fragment1"  
            android:name="com.example.fragmentdemo.Fragment1"  
            android:layout_width="0dip"  
            android:layout_height="match_parent"  
            android:layout_weight="1" /> 

    这样就可以了;

    2、动态使用fragment

    首先,Activity的布局中不用加fragment:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:id="@+id/main_layout"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent"  
        android:baselineAligned="false" >  
      
    </LinearLayout>  

    在java中:

    Fragment1 fragment1 = new Fragment1();  
                getFragmentManager().beginTransaction().replace(R.id.main_layout, fragment1).commit(); 

    分四步:

    1.获取到FragmentManager,在Activity中可以直接通过getFragmentManager得到。

    2.开启一个事务,通过调用beginTransaction方法开启。

    3.向容器内加入Fragment,一般使用replace方法实现,需要传入容器的id和Fragment的实例。

    4.提交事务,调用commit方法提交。

    若是想在Fragment中调用Activity中的函数,可直接使用(MainActivity)getActivity()来获取活动;

    若想在创建Fragment时,从Activity中传递数据给Fragment,可利用Bundle:

            FriendsFragment friendsFragment = new FriendsFragment();
            Bundle bundle = new Bundle();
            serializable = new DataSerializable();
            serializable.setListFriend(myFriendList);
            bundle.putSerializable("list_friend", serializable);
            friendsFragment.setArguments(bundle);
            fragmentList.add(friendsFragment);

    Fragment代码中:

    @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            View view = inflater.inflate(R.layout.fragment_friends, container, false);
    
            DataSerializable dataSerializable = (DataSerializable)getArguments().getSerializable("list_friend");
            List<MyFriend> myFriendsList = dataSerializable.getListFriend();
    
            return view;
        }

    其中,DataSerializable是自己实现的一个类,实现了Serializable接口,这样就可以在Bundle中存储更多复杂类型的数据,简单数据比如int,直接用Bundle.putint();

    DataSerializable代码如下:

    public class DataSerializable implements Serializable {
        private List<MyFriend> myFriendList;
    
        public void setListFriend(List<MyFriend> myFriendList){
            this.myFriendList = myFriendList;
        }
        public List<MyFriend> getListFriend(){
            return myFriendList;
        }
    }

    如果在Activity中想调用Fragment中的函数:

    ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
  • 相关阅读:
    jvm基本结构和解析
    多态的意思
    java中对象的简单解读
    double类型和int类型的区别
    python 解析xml文件
    win10不能映射Ubuntu共享文件
    Qt程序打包
    Ubuntu boot分区文件误删,系统无法启动,怎么解
    ubuntu Boot空间不够问题“The volume boot has only 5.1MB disk space remaining”
    Ubuntu 分辨率更改 xrandr Failed to get size of gamma for output default
  • 原文地址:https://www.cnblogs.com/zhaozilongcjiajia/p/10425180.html
Copyright © 2011-2022 走看看