十三年专注于网站建设与互联网应用开发,低调、有情怀的网络应用服务商!
南昌百恒科技微信公众号 扫一扫关注
tel-icon全国服务热线:400-680-9298,0791-88117053
扫一扫关注百恒科技微信公众号

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

百恒 2017-09-19 16:09:13 3261
       每个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);         

       return 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开发方面的知识,欢迎访问公司官网!
400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号

欢迎您的光顾,我们将竭诚为您服务×

售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售后服务 售后服务
 
备案专线 备案专线
 
售后服务 售后服务
 
×