Activity如何傳遞數據給Fragment——回調方法

【聲明】轉載請註明出處,此文出自指尖飛落的博客:http://blog.csdn.net/huntersnail

——尊重作者,知識無價,交流無限!


需求:Activity傳遞數據給Fragment

問題:界面之間傳遞數據在開發中是經常遇到的一種情況,如果是Actvity之間傳遞咱們可以用Intent,非常方便。但是,Activity傳遞數據給Fragment還能用Intent嗎?答案是顯然是否定的,Fragment不能用Intent,所以,咱們該如何傳遞數據呢?我採用的是回調的方法。

思路:①在Fragment創建一個方法,且爲setData(OrderDetail data)

  ②在Activity中實例化該Fragment,通過該實例調用setData()方法,並將數據傳進去。


網上看了一些關於Java回調函數的解釋,下面貼出來給大家看看。有興趣可以去看看點擊打開鏈接

首先說說什麼叫回調函數(網上查詢了一些資料,對它的解說還是比較全面,但是很難理解,特別是在JAVA當中實現回調函數,不理解什麼叫回調函數的,就更難實現了),以下介紹根據網上的資料整合而成。
    在WINDOWS中,程序員想讓系統DLL調用自己編寫的一個方法,於是利用DLL當中回調函數(CALLBACK)的接口來編寫程序,使它調用,這個就稱爲回調。在調用接口時,需要嚴格的按照定義的參數和方法調用,並且需要處理函數的異步,否則會導致程序的崩潰。這樣的解釋似乎還是比較難懂,這裏舉個簡單的例子,程序員A寫了一段程序(程序a),其中預留有回調函數接口,並封裝好了該程序。程序員B要讓a調用自己的程序b中的一個方法,於是,他通過a中的接口回調自己b中的方法。目的達到。在C/C++中,要用回調函數,被掉函數需要告訴調用者自己的指針地址,但在JAVA中沒有指針,怎麼辦?我們可以通過接口(interface)來實現定義回調函數。

不廢話了,直接貼代碼,看紅色關鍵代碼。

1、Activity

<span style="color:#333333;">public class OrderDetailsActivity extends BaseActivity{
	private static final String TAG = "訂單ID";
    private ViewPager mPager;
    private ArrayList<Fragment> fragmentsList;
    private ImageView ivBottomLine;
    private TextView tvInfo, tvGood;

    private int currIndex = 0;
    private int bottomLineWidth;
    private int offset = 0;
    private int position_one;
    private int position_two;
    private String OrderId;
	private FzHttpRequest mRequest;
	public OrderInfoFragment mOrderInfoFragment;
	private OrderGoodsListFragment mOrderGoodsListFragment;
	public OrderDetail mOrderDetail;
	private TextView mTitle;
	private Resources resources;
	public String getOrderId() {
		return OrderId;
	}

	public void setOrderId(String orderId) {
		OrderId = orderId;
	}

	@Override
	protected void fzOnCreate(Bundle arg0) {
		setContentView(R.layout.activity_order_detail);
		mTitle=(TextView) findViewById(R.id.tv_title);//標題
		mTitle.setText("訂單詳情");
		resources=getResources();
		mRequest = FzHttpRequest.getInstance();
        InitViewPager();
        InitTextView();
        InitWidth();
        InitData();
	}

	@SuppressWarnings("deprecation")
	public void InitData() {
		//獲得訂單ID
        OrderId=getIntent().getStringExtra("ORDERID");
		AjaxParams params = new AjaxParams();
		params.put("code", MyApplication.getInstance().getCode());
		params.put("SupplierID", MyApplication.getInstance()
				.getCurrentSupplierid());
		params.put("orderId", getIntent().getStringExtra("ORDERID"));
		System.out.println(getIntent().getStringExtra("ORDERID"));
		mRequest.post(Config.GETORDERLIST, params, new SimpleFzHttpListener(
				OrderDetailsActivity.this) {
			@Override
			public void onSuccess(Object t) {
				super.onSuccess(t);
				mOrderDetail = (OrderDetail) t;
				if (mOrderDetail != null) {
					Log.i(TAG+"DATA", mOrderDetail.toString());
					</span><span style="color:#ff0000;">if (mOrderInfoFragment!=null) {
						mOrderInfoFragment.setData(mOrderDetail);
					}
					if (mOrderGoodsListFragment!=null) {
						mOrderGoodsListFragment.setData(mOrderDetail.getOrderItemsIList());
					}</span><span style="color:#333333;">
					Log.i(TAG, mOrderDetail.toString());
					
				} else {
					ToastUtils.showLongToast("未賦值!");
				}
			}
			@Override
			public void onFailure(Throwable t, int errorNo, String strMsg) {
				super.onFailure(t, errorNo, strMsg);
				ToastUtils.showLongToast(strMsg);
			}
		},OrderDetail.class);
	}</span>
<span style="color:#333333;">private void InitTextView() {
		tvInfo = (TextView) findViewById(R.id.tv_tab_info);
		tvGood = (TextView) findViewById(R.id.tv_tab_good);
		tvInfo.setTextColor(resources.getColor(R.color.lightwhite));
		tvInfo.setOnClickListener(new MyOnClickListener(0));
		tvGood.setOnClickListener(new MyOnClickListener(1));
		
	}

	private void InitViewPager() {
		mPager = (ViewPager) findViewById(R.id.vPager);
        fragmentsList = new ArrayList<Fragment>();

        </span><span style="color:#ff0000;">mOrderInfoFragment = new OrderInfoFragment();
        mOrderGoodsListFragment =new OrderGoodsListFragment();</span><span style="color:#333333;">

        fragmentsList.add(mOrderInfoFragment);
        fragmentsList.add(mOrderGoodsListFragment);

        
        mPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentsList));
        mPager.setCurrentItem(0);
        mPager.setOnPageChangeListener(new MyOnPageChangeListener());
	}</span>

2、Fragment

<span style="color:#333333;">/**
 * 訂單的詳細信息界面(不包括商品信息)
 * 
 * @author Endoon 2015-6-12 11:32:59
 */
public class OrderInfoFragment extends BaseFragment {
	private TextView mOrderId;

	private TextView mOrderTime;

	private TextView mOrderUsername;

	private TextView mOrderAdress;

	private TextView mOrderMoney;

	private TextView mOrderPhone;
	public OrderInfoFragment infoFragment;
	</span><span style="color:#ff0000;">public OrderDetail mData;</span><span style="color:#333333;">
	
	public OrderInfoFragment() {
		super();
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	}
	
	@Override
	protected View inflaterView(LayoutInflater arg0, ViewGroup arg1, Bundle arg2) {
		return arg0.inflate(R.layout.fragment_order_good, null);
		
	}

	@Override
	protected void initView(View view) {
		super.initView(view);
		mOrderId = (TextView) view.findViewById(R.id.tv_order_detail_id);
		mOrderTime = (TextView) view.findViewById(R.id.tv_order_detail_time);
		mOrderUsername = (TextView) view.findViewById(R.id.tv_order_detail_username);
		mOrderAdress = (TextView) view.findViewById(R.id.tv_order_detail_address);
		mOrderMoney = (TextView) view.findViewById(R.id.tv_order_detail_money);
		mOrderPhone = (TextView) view.findViewById(R.id.tv_order_detail_phone);
		
	}
	
	</span><span style="color:#ff0000;">public void setData(OrderDetail data)
	{
		this.mData = data;
		if (mData!=null)
		{</span><span style="color:#333333;">
			mOrderId.setText(mData.getOrderId());
			
			mOrderUsername.setText(mData.getUsername());
			
			String orderTime=getDateToStr(mData.getOrderDate(), "yyyy-MM-dd HH:mm");
			mOrderTime.setText(orderTime);
			
			mOrderAdress.setText(mData.getAddress());
			mOrderMoney.setText("¥"+mData.getOrderTotal()+"(運費 3 元)");
			mOrderPhone.setText(mData.getCellPhone());
			
			mOrderPhone.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
					// 調到撥號界面
					Uri uri = Uri.parse("tel:"+mData.getCellPhone());
					Intent intent = new Intent(Intent.ACTION_CALL, uri);
					startActivity(intent);
				}
			});
		}
	</span><span style="color:#ff0000;">}</span><span style="color:#333333;">
	
	private String getDateToStr(String str, String format) {
		try {
			str = str.replace("/Date(", "").replace(")/", "");
			Log.i("try", str);

			SimpleDateFormat _format = new SimpleDateFormat(format);

			Long time = new Long(str);
			String d = _format.format(time);
			Date date = _format.parse(d);

			return _format.format(date);
		} catch (Exception e) {
			e.printStackTrace();
			return "";
		}
	}

}</span>









O(∩_∩)O哈哈~歡迎各種吐槽、鄙視、指教、交流......

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆轉載請註明出處☞指尖飛落的博客☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆






發佈了22 篇原創文章 · 獲贊 10 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章