您的位置:首页 > 其它

fragment使用时getArguments报空解决

2016-05-27 13:31 399 查看
今天在使用fragment获取到activity的值时遇到一个问题,耽误了好长时间,在此分享给大家

遇到的问题是getArguments为空,

05-21 23:13:51.906 3262-3262/com.fang.zrf.smartlockdemo I/fang: onCreate--->arg:null
05-21 23:13:51.906 3262-3262/com.fang.zrf.smartlockdemo I/fang: getIntentData--->arg:null
05-21 23:13:51.906 3262-3262/com.fang.zrf.smartlockdemo I/fang: initBaseData--->arg:null
05-21 23:13:51.916 3262-3262/com.fang.zrf.smartlockdemo I/fang: initView----arg:null
05-21 23:13:51.926 3262-3262/com.fang.zrf.smartlockdemo I/fang: initData----arg:null
05-21 23:13:51.926 3262-3262/com.fang.zrf.smartlockdemo I/fang: onResume----arg:null
05-21 23:13:51.926 3262-3262/com.fang.zrf.smartlockdemo I/fang: onCreate--->arg:null
05-21 23:13:51.926 3262-3262/com.fang.zrf.smartlockdemo I/fang: initBaseData--->arg:null
百度了下也没找到答案,后来看了看API源码才发现

首先你如果想获取getArguments,那么你所创建的fragment对象必须去调用setArguments方法

对于setArguments()方法官方是这样说的:

/**
* Supply the construction arguments for this fragment. This can only
* be called before the fragment has been attached to its activity; that
* is, you should call it immediately after constructing the fragment. The
* arguments supplied here will be retained across fragment destroy and
* creation.
*/
public void setArguments(Bundle args) {
。。。。
}

大致翻译一下就是这个方法必须也只能在fragment与它的activity绑定之前进行调用,也就是说,当你初始化了fragment对象后和你必须在绑定它和它的activity关系之前去调用它。
但有一点,这是保证你的程序正确,即程序中没有重复的去创建fragment的前提下,否则,你就算刚开始初始化了,再次调用的话还是会报空。

在初始化fragment后,绑定之前,调用setArguments()方法将所要传递的数据传给fragment

Bundle arguments = new Bundle();
arguments.putString(IntentConstant.KEY_ID,mKeyId);
arguments.putString(IntentConstant.KEY_ADDR,mKeyAddress);
mManageKeyInitFragment.setArguments(arguments);

就这样问题OK,完美的解决了

05-21 23:22:36.246 17100-17100/com.fang.zrf.smartlockdemo I/fang: onCreate--->arg:Bundle[{intent_key_address=00, intent_key_id=11}]
05-21 23:22:36.246 17100-17100/com.fang.zrf.smartlockdemo I/fang: getIntentData--->arg:Bundle[{intent_key_address=00, intent_key_id=11}]
05-21 23:22:36.246 17100-17100/com.fang.zrf.smartlockdemo I/fang: initBaseData--->arg:Bundle[{intent_key_address=00, intent_key_id=11}]
05-21 23:22:36.256 17100-17100/com.fang.zrf.smartlockdemo I/fang: initView----arg:Bundle[{intent_key_address=00, intent_key_id=11}]
05-21 23:22:36.266 17100-17100/com.fang.zrf.smartlockdemo I/fang: initData----arg:Bundle[{intent_key_address=00, intent_key_id=11}]
05-21 23:22:36.266 17100-17100/com.fang.zrf.smartlockdemo I/fang: onResume----arg:Bundle[{intent_key_address=00, intent_key_id=11}]
05-21 23:22:36.266 17100-17100/com.fang.zrf.smartlockdemo I/fang: onCreate--->arg:Bundle[{intent_key_address=00, intent_key_id=11}]
05-21 23:22:36.266 17100-17100/com.fang.zrf.smartlockdemo I/fang: initBaseData--->arg:Bundle[{intent_key_address=00, intent_key_id=11}]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: