百恒网络
APP开发之附加argument给 fragment 的方法
  • 百恒服务
  • APP开发
  • 网页案例
  • 网页知识
  • 关于我们
  • 联系我们
  • APP开发之附加argument给 fragment 的方法

    2017-09-19 16:09:13 3486
           每个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开发方面的知识,欢迎访问公司官网!
    展开分享
    服务
    案例
    首页
    动态
    联系
    咨询