1. 程式人生 > >Fragment資訊互動之Fragment獲取DialogFragment的返回資料

Fragment資訊互動之Fragment獲取DialogFragment的返回資料

Fragment資訊互動會出現使用一個Fragment點選觸發DialogFragment,並將資訊資料返回到開始的Fragment中的情況。這種情況無法再使用startActivityforResult,所以可以使用setTargetFragment(),以及getTargetFragment().onActivityResult()的方式來進行收發資料。

ContentFragment是依附在ContentActivity上的Fragment,點選ContentFragment中的按鈕後,會跳出DialogFragment,此時DialogFragment與ContentFragment是同一個Activity。


關鍵程式碼:

1 在ContentFragment設定目標Fragment

EvaluateDialog evaluateDialog = new EvaluateDialog();
				//設定目標Fragment
				evaluateDialog.setTargetFragment(ContentFragment.this, REUEST_CODDE);
				evaluateDialog.show(getFragmentManager(), "evaluate_dialog");
2 在DialogFragment設定返回資料:
	protected void setData(String str) {


		if(getTargetFragment()==null)
		{
			return ;
		}
		Intent intent = new Intent();
		intent.putExtra(REQUESE, EvaluteArg[mWhich]);
		
		//獲得目標Fragment,並將資料通過onActivityResult放入到intent中進行傳值
		getTargetFragment().onActivityResult(ContentFragment.REUEST_CODDE, Activity.RESULT_OK, intent);
		
	}
3 在ContentFragment對返回資料進行接收解析:
@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		if(requestCode==REUEST_CODDE)
		{
			String stringExtra = data.getStringExtra(EvaluateDialog.REQUESE);
			System.out.println("stringExtra :"+stringExtra);
		}
	}

本例程式碼:http://download.csdn.net/detail/xiaoleiacm/9481784

ContentFragment:

package com.example.fragmentdialog;

import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;

public class ContentFragment extends Fragment {
	protected static final int REUEST_CODDE = 0;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub

		View view = inflater.inflate(R.layout.content_fragment, null);
		Button btn = (Button)view.findViewById(R.id.btn_fragment);
		btn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				System.out.println("123");
				EvaluateDialog evaluateDialog = new EvaluateDialog();
				//設定目標Fragment
				evaluateDialog.setTargetFragment(ContentFragment.this, REUEST_CODDE);
				evaluateDialog.show(getFragmentManager(), "evaluate_dialog");
			}
		});
		return view;
	}
	
	/**
	 * 接收返回引數
	 */
	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		if(requestCode==REUEST_CODDE)
		{
			String stringExtra = data.getStringExtra(EvaluateDialog.REQUESE);
			System.out.println("stringExtra :"+stringExtra);
		}
	}

}

DialogFragment:
package com.example.fragmentdialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class EvaluateDialog extends DialogFragment {

	public String[] EvaluteArg = new String[] { "GOOD", "BAD", "NORMAL" };
	private int mWhich;

	public static final String REQUESE="RESOIBSE";
	@Override
	public Dialog onCreateDialog(Bundle savedInstanceState) {

		AlertDialog.Builder buidler = new AlertDialog.Builder(getActivity());
		// 直接設定內容模式
		TextView textView = new TextView(getActivity());
		buidler.setView(textView);

		buidler.setItems(EvaluteArg, new OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				mWhich = which;
				System.out.println("內容 :" + EvaluteArg[which]);
				System.out.println("當前點選項: " + which);
				setData(EvaluteArg[which]);
			}
		});
		
		return buidler.create();
	}

	protected void setData(String str) {


		if(getTargetFragment()==null)
		{
			return ;
		}
		Intent intent = new Intent();
		intent.putExtra(REQUESE, EvaluteArg[mWhich]);
		
		//獲得目標Fragment,並將資料通過onActivityResult放入到intent中進行傳值
		getTargetFragment().onActivityResult(ContentFragment.REUEST_CODDE, Activity.RESULT_OK, intent);
		
	}
}
ContentActivity:
package com.example.fragmentdialog;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class ContentActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		InitContentFragment();
	}

	private void InitContentFragment() {
		FragmentManager fragmentManager = getFragmentManager();
		FragmentTransaction transaction = fragmentManager.beginTransaction();
		ContentFragment contentFragment = new ContentFragment();
		transaction.replace(R.id.fl_content, contentFragment);
		transaction.commit();
		
	}

}