我搜索的網站,並有類似的問題,像我,但沒有主題的不是我的回答開始一個活動形式的片段
看看這張圖:
所以很清楚我想通過發送從CrimeListFragment
在其intent
,我讀了這本書的intent
+的extra
開始CrimeActivity
ndroid編程的作者說:
從一個片段開始一個活動的工作幾乎與從另一個活動開始一個活動相同。 您撥打Fragment.startActivity(意向)方法,它調用幕後相應的活動 方法
CrimeListFragment.java:
public void onListItemClick(ListView l, View v, int position, long id) {
// Get the Crime from the adapter
Crime c = ((CrimeAdapter)getListAdapter()).getItem(position);
// Start CrimeActivity
Intent i = new Intent(getActivity(), CrimeActivity.class);
i.putExtra(CrimeFragment.EXTRA_CRIME_ID, c.getId());
startActivity(i);
}
第二部分現在檢索intent
和它的extra
和作者說的那個:
有兩種方法一個片段可以根據其活動意圖訪問數據:一個簡單,直接的快捷方式和一個複雜而靈活的實現。首先,你要試試快捷方式。然後,您將執行涉及片段參數的複雜而靈活的解決方案 。
和我的問題是關於第一種方式,快捷
在快捷,CrimeFragment就乾脆用getActivity()方法來直接訪問 CrimeActivity的意圖。返回到CrimeFragment並添加額外的密鑰。然後,在 的onCreate(捆綁),從CrimeActivity的意圖獲取額外的,並用它來獲取犯罪
CrimeFragment.java:
public class CrimeFragment extends Fragment {
public static final String EXTRA_CRIME_ID =
"com.bignerdranch.android.criminalintent.crime_id";
private Crime mCrime;
...
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mCrime = new Crime();
UUID crimeId = (UUID)getActivity().getIntent()
.getSerializableExtra(EXTRA_CRIME_ID);
mCrime = CrimeLab.get(getActivity()).getCrime(crimeId);
}
的缺點直接檢索
讓片段訪問屬於託管活動的意圖使簡單的代碼。 但是,它會花費你封裝你的片段。 CrimeFragment不再是可重用的 building block,因爲它期望它始終由一個活動託管,該活動的意圖定義了一個名爲EXTRA_CRIME_ID的額外的 。
這對CrimeFragment的部分可能是一個合理的期望,但它 意味着CrimeFragment,如目前所寫,不能與 任何活動一起使用。
我的問題,問題是最後一句,爲什麼這個片段(CrimeFragment
)不能僅僅用任何Activity
使用???
使用片段中的getActivity()來啓動新的活動。 –