今天在使用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的前提下,否则,你就算刚开始初始化了,再次调用的话还是会报空。
在初始化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}]