Fragment跳轉(zhuǎn)時傳遞參數(shù)及結(jié)果回傳的方法(推薦)
今天總結(jié)一下Fragment間的參數(shù)傳遞及結(jié)果返回的方法。
效果圖:
1、點擊“加載第二個Fragment按鈕”,加載出第二個Fragment,同時傳遞過去參數(shù):“從Fragment1傳來的參數(shù)”這幾個String;
2、當用戶點擊第二個Fragment中的幾個圖片時,將點中的結(jié)果返回給第一個Fragment,將用戶的選擇在第一個Fragment顯示出來
一、基本架構(gòu)搭建
首先,我們要把整個架構(gòu)搭起來,然后再進行參數(shù)傳遞和回傳
(一)、基本XML構(gòu)建:
根據(jù)上面的效果,大家很容易看到兩個Fragment的布局:
1、Fragment1的布局:(fragment1.xml)
很簡單,垂直布局,上面一個ImageView來盛裝返回過來的圖片結(jié)果,下面一個Button來用來點擊加載第二個Fragment;
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff" android:orientation="vertical"> <ImageView android:id="@+id/img_result" android:layout_width="100dp" android:layout_height="100dp" android:scaleType="center"/> <Button android:id="@+id/load_fragment2_btn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="加載第二個Fragment"/> </LinearLayout>
2、Fragment2的布局:(fragment2.xml)
這個也是垂直布局,上面的一個TextView用來盛裝從Fragment1傳過來的String參數(shù),下面的幾個ImageView用來顯示幾個供用戶選擇的圖片
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff" android:orientation="vertical"> <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is fragment 2" android:textColor="#000000" android:textSize="25sp" /> <ImageView android:id="@+id/img1" android:layout_width="100dip" android:layout_height="100dp" android:scaleType="center" android:src="@drawable/animal1"/> <ImageView android:id="@+id/img2" android:layout_width="100dip" android:layout_height="100dp" android:scaleType="center" android:src="@drawable/animal2"/> <ImageView android:id="@+id/img3" android:layout_width="100dip" android:layout_height="100dp" android:scaleType="center" android:src="@drawable/animal3"/> <ImageView android:id="@+id/img4" android:layout_width="100dip" android:layout_height="100dp" android:scaleType="center" android:src="@drawable/animal4"/> </LinearLayout>
(二)對應(yīng)的Fragment類
1、在MainActivity初始化時,將Fragment1顯示出來:
MainActivity對應(yīng)的XML文件:(main_activity.xml)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main_layout" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
對應(yīng)的代碼:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Fragment1 fragment1 = new Fragment1();
getFragmentManager().beginTransaction().replace(R.id.main_layout, fragment1).commit();
}
}
2、Fragment1:在用戶點擊時,將fragment2添加到當前頁面顯示出來;
public class Fragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment1, container, false);
Button btn = (Button)view.findViewById(R.id.load_fragment2_btn);
btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(final View view) {
Fragment2 fragment2 = new Fragment2();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.add(R.id.main_layout, fragment2);
transaction.addToBackStack(null);
transaction.commit();
}
});
return view;
}
}
3、Fragment2:至于目前的它還是很簡單的,只要能顯示出來 就好了,所以他的代碼為:
public class Fragment2 extends Fragment implements View.OnClickListener {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment2, container, false);
return view;
}
}
二、Fragment間參數(shù)傳遞
至于Fragment間參數(shù)為什么要用SetArguments來傳遞,我就不講了,看這篇文章:《Android解惑 - 為什么要用Fragment.setArguments(Bundle bundle)來傳遞參數(shù)》,我這里只說項目中如何使用:
在Fragment2中,新建一個函數(shù):newInstance(String text)來接收傳過來的參數(shù):
新建一個Fragment2實例,然后將參數(shù)通過SetArguments設(shè)置到其中;
public static Fragment2 newInstance(String text) {
Fragment2 fragment = new Fragment2();
Bundle args = new Bundle();
args.putString("param", text);
fragment.setArguments(args);
return fragment;
}
然后在Fragment2的OnCreateView的時候再從arguments中獲取參數(shù):
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment2, container, false);
if (getArguments() != null) {
String mParam1 = getArguments().getString("param");
TextView tv = (TextView)view.findViewById(R.id.textview);
tv.setText(mParam1);
}
return view;
}
在Fragment1中,在調(diào)起Fragmen2t時,通過調(diào)用newInstance函數(shù)來獲取實例并傳遞參數(shù):
public class Fragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment1, container, false);
Button btn = (Button)view.findViewById(R.id.load_fragment2_btn);
btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(final View view) {
Fragment2 fragment2 = Fragment2.newInstance("從Fragment1傳來的參數(shù)");
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.add(R.id.main_layout, fragment2);
transaction.addToBackStack(null);
transaction.commit();
}
});
return view;
}
}
(三)、從Fragment2向Fragment1回傳參數(shù)
這里只有利用回調(diào),有關(guān)回調(diào)傳遞參數(shù)的問題,我在前一篇文章中:《詳解Dialog(三)——自定義對話框視圖及參數(shù)傳遞》第三部分:參數(shù)傳遞;詳細講過,大家可以先看源碼,如果源碼不懂,可以參考下這篇文章,這里就不再贅述。
相關(guān)文章
詳解Android應(yīng)用開發(fā)中Scroller類的屏幕滑動功能運用
這篇文章主要介紹了詳解Android應(yīng)用開發(fā)中Scroller類的屏幕滑動功能運用,文中包括各種觸摸滑屏手勢相關(guān)方法的示例,需要的朋友可以參考下2016-02-02
Android應(yīng)用設(shè)置獨立的多語言實戰(zhàn)技巧詳解
這篇文章主要為大家介紹了Android應(yīng)用設(shè)置獨立的多語言實戰(zhàn)技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12
Android 通過onDraw實現(xiàn)在View中繪圖操作的示例
以下是對Android通過onDraw實現(xiàn)在View中繪圖操作的示例代碼進行了詳細的分析介紹,需要的朋友可以過來參考下2013-07-07
android使用service和activity獲取屏幕尺寸的方法
這篇文章主要介紹了android使用service和activity獲取屏幕尺寸的方法,實例分析了基于service和activity兩種方法獲取屏幕尺寸的相關(guān)技巧,非常簡單實用,需要的朋友可以參考下2015-08-08
Android如何判斷一個點在不在多邊形區(qū)域內(nèi)
這篇文章主要為大家詳細介紹了Android判斷一個點在不在多邊形區(qū)域內(nèi)的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05

