Fragment与Activity之间的数据交换,大体上包括三种:
一、Fragment从Activity获取数据(本文章只介绍第一种);
二、Activity从Fragment获取数据;
三、Fragment之间获取数据。
实现效果图:
从Activity传递数据到两个Fragment中,Fragment获取数据后,展示出来。
源代码:
布局文件:
activity_main:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="horizontal"> <LinearLayout android:id="@+id/left" android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="vertical" android:layout_weight="2" android:background="#CCCCCC"> </LinearLayout> <LinearLayout android:id="@+id/right" android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="vertical" android:layout_weight="2"> </LinearLayout> </LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" tools:context=".MainActivity" > <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" tools:context=".MainActivity" > <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
MainActivity:
package com.fragmentdemo5_commute; import android.app.Activity; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.os.Bundle; /** * 一、Fragment从Activity获取数据。 */ public class MainActivity extends Activity { private FragmentManager manager; private FragmentTransaction transaction; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); manager = getFragmentManager(); transaction = manager.beginTransaction(); MyFragment1 fragment1 = new MyFragment1(); Bundle bundle1 = new Bundle(); bundle1.putString("id", "Activity发送给MyFragment1的数据"); fragment1.setArguments(bundle1); transaction.replace(R.id.left, fragment1, "left"); MyFragment2 fragment2 = new MyFragment2(); Bundle bundle2 = new Bundle(); bundle2.putString("id", "Activity发送给MyFragment2的数据"); fragment2.setArguments(bundle2); transaction.replace(R.id.right, fragment2, "right"); transaction.commit(); } }
package com.fragmentdemo5_commute; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; public class MyFragment1 extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.f1, null); TextView textView = (TextView) view.findViewById(R.id.textView); Bundle bundle1 = getArguments(); textView.setText(bundle1.getString("id")); return view; } }
package com.fragmentdemo5_commute; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; public class MyFragment2 extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.f2, null); TextView textView = (TextView) view.findViewById(R.id.textView); Bundle bundle2 = getArguments(); textView.setText(bundle2.getString("id")); return view; } }
点击下载源码