APP开发之附加argument给 fragment 的方法

       每个fragment实例都可附带一个Bundle对象。该bundle包含有键值对,我们可以像附加extra 到Activity的intent中那样使用它们。一个键值对即一个argument。 

       要创建fragment argument,首先需创建Bundle对象。然后使用Bundle限定类型的“put”方法,将argument添加到bundle中。那么具体如何操作呢?下面南昌APP开发公司小编就来为大家介绍一下,代码如下:

       Bundle args = new Bundle(); 

       args.putSerializable(EXTRA_MY_OBJECT, myObject); 

       args.putInt(EXTRA_MY_INT, myInt); 

       args.putCharSequence(EXTRA_MY_STRING, myString);

       要附加argument bundle给fragment,需调用Fragment.setArguments(Bundle)方法。而且,还必须在fragment创建后、添加给activity前完成。 

       为满足以上要求,Android开发者采取的习惯做法是:添加名为newInstance()的静态方法给Fragment类。使用该方法,完成fragment实例及bundle对象的创建,然后将argument放入bundle 中,后再附加给fragment。 

       托管activity需要fragment实例时,转而调用newInstance()方法,而非直接调用其构造方法。而且,为满足fragment创建argument的要求,activity可传入任何需要的参数给newInstance()方法。 

       在CrimeFragment类中,编写可以接受UUID参数的newInstance(UUID)方法,如下代码所示。通过该方法,创建argument bundle和fragment实例,然后附加argument给fragment。 

       编写newInstance(UUID)方法(CrimeFragment.java) 

       public class CrimeFragment extends Fragment {   

       private static final String ARG_CRIME_ID = "crime_id";  

       private Crime mCrime;     

       private EditText mTitleField;     

       private Button mDateButton;     

       private CheckBox mSolvedCheckbox;  

    

       public static CrimeFragment newInstance(UUID crimeId) {         

       Bundle args = new Bundle();         

       args.putSerializable(ARG_CRIME_ID, crimeId);  

     

       CrimeFragment fragment = new CrimeFragment();         

       fragment.setArguments(args);         

       r

eturn fragment;     

       }  

       ...  

       } 

       现在,需创建CrimeFragment时,CrimeActivity应调用CrimeFragment.newInstance(UUID) 方法,并传入从它的extra中获取的UUID参数值。回到CrimeActivity类中,在createFragment() 方法里,从CrimeActivity的intent中获取extra数据,并传入CrimeFragment.newInstance(UUID) 方法,如代码清单1所示。 

       既然其他类不会用到EXTRA_CRIME_ID,可以将其改为私有。(注意,为了方便,我们直接删除并替换了第一行,实际上只要改public为private就可以了。) 

       代码清单1  使用newInstance(UUID)方法 (CrimeActivity.java) 

       public class CrimeActivity extends SingleFragmentActivity {  

       public static final String EXTRA_CRIME_ID = "com.bignerdranch.android.criminalintent.crime_id";   

       private static final String EXTRA_CRIME_ID = "com.bignerdranch.android.criminalintent.crime_id"; 

       ...  

   

       @Override     

       protected Fragment createFragment() {        

       return new CrimeFragment();         

       UUID crimeId = (UUID) getIntent()                 

       .getSerializableExtra(EXTRA_CRIME_ID);         

       return CrimeFragment.newInstance(crimeId);     

       }  

       }

       注意,activity和fragment不需要也无法同时相互保持独立性。CrimeActivity必须了解 CrimeFragment的内部细节,比如知道它内部有个newInstance(UUID)方法。这很正常。托管 activity应该知道这些细节,以便托管fragment;但fragment就不一定要知道其托管activity的细节问题,至少在需要保持fragment通用独立性的时候是如此。 

       以上便是南昌APP开发公司-易速网络为大家介绍的把argument附加给 fragment 的方法,希望对大家有所帮助。了解更多关于APP开发方面的知识,欢迎访问公司官网!

提供全面的搜索引擎优化学习交流,专注网站优化和搜索引擎营销推广服务。用专业的SEO技术为企业网站提升关键词排名,让你的网站不仅满足用户体验还要适合搜索引擎优化规则。
易速网站优化公司 » APP开发之附加argument给 fragment 的方法
享更多特权,立即登录下载海量资源
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡