Activity如何传递数据给Fragment——回调方法
来源:互联网 发布:安全守护下载软件 编辑:程序博客网 时间:2024/05/08 13:43
【声明】转载请注明出处,此文出自指尖飞落的博客: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;}@Overrideprotected 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) {@Overridepublic 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("未赋值!");}}@Overridepublic 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();}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Overrideprotected View inflaterView(LayoutInflater arg0, ViewGroup arg1, Bundle arg2) {return arg0.inflate(R.layout.fragment_order_good, null);}@Overrideprotected 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() {@Overridepublic 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哈哈~欢迎各种吐槽、鄙视、指教、交流......
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆转载请注明出处☞指尖飞落的博客☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
- Activity如何传递数据给Fragment——回调方法
- activity给fragment传递数据
- fragment 如何向 activity 传递数据
- Activity如何向Fragment中传递数据
- 解决 activity 和 fragment 传递数据方法。
- Activity与fragment之间数据传递方法
- 传递数据给Fragment的方法
- Activity传递Binder给Fragment
- Android——Activity向Fragment传递数据...
- Android——Fragment向Activity传递数据...
- 把activity传递给FragmentActivity的数据再传递给FragmentActivity的子Fragment
- android Activity 如何异步向Fragment传递数据
- fragment向activity传递数据
- android fragment activity 数据传递
- Activity向Fragment传递数据
- Fragment传递数据到Activity
- Fragment与Activity传递数据
- FragMent传递数据到Activity
- 对mvc模式的理解
- 杭电 1010
- Swift2.0语言教程之函数的返回值与函数类型
- Java HttpURLConnection超时问题
- <为知更新>Preference的 相关类 及 常用方法
- Activity如何传递数据给Fragment——回调方法
- linux inifile.cpp
- 试管婴儿有哪些过程
- LA4329(树状数组)
- 再次记录老K网站的工作策略
- UI--Android中的状态切换按钮自定义
- UML用例图中包含(include)、扩展(extend)和泛化(generalization)
- 在Ubuntu中安装eclipse
- ios开发输出消息控制