? ? ? ?要創建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開發方面的知識,歡迎訪問公司官網!