CriminalIntent應用目前不支持刪除現有crime記錄。請為CrimeFragment添加菜單項,允許用戶刪除當前crime記錄。用戶點擊刪除菜單項后,記得調用CrimeFragment托管活動的finish()方法回退到前一個activity界面。
步驟跟書里添加的那段差不多:
1.創建菜單資源,在res/menu目錄下添加fragment_crime.xml文件,圖標可以自己做,這里略
1 <?xml version="1.0" encoding="utf-8"?> 2 <menu xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto"> 4 <item 5 android:id="@+id/delete_crime" 6 android:icon="@drawable/ic_menu_delete" 7 app:showAsAction="ifRoom|withText" 8 android:title="delete_crime" /> 9 </menu>
2.在CrimeFragment.java中,覆蓋onCreateOptionsMenu(Menu, MenuInflater)方法,實例化fragment_crime.xml中定義的菜單
1 @Override 2 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 3 super.onCreateOptionsMenu(menu, inflater); 4 inflater.inflate(R.menu.fragment_crime, menu); 5 }
3.定義CrimeFragment.onCreate(Bundle) 方法, 調用setHasOptionsMenu方法讓FragmentManager知道CrimeFragment需接收選項菜單方法回調。
1 @Override 2 public void onCreate(@Nullable Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 5 UUID crimeId = (UUID)getArguments().getSerializable(ARG_CRIME_ID); 6 mCrime = CrimeLab.get(getActivity()).getCrime(crimeId); 7 8 setHasOptionsMenu(true); 9 }
4.為了響應用戶點擊Delete Crime菜單項,需實現新方法以crime頁刪除當前Crime。在CrimeLab.java中,新增一個removeCrime()方法。
1 public void removeCrime(Crime c) { 2 mCrimes.remove(c); 3 }
5.在CrimeFragment.java中,實現onOptionsItemSelected(MenuItem)方法,以響應菜單項的選擇事件,通過檢查菜單項ID判斷選的是哪個菜單項。在該方法中,刪除當前的Crime實例,最后調用CrimeFragment托管活動的finish()方法回退到前一個activity界面。
1 @Override 2 public boolean onOptionsItemSelected(MenuItem item) { 3 switch (item.getItemId()) { 4 case R.id.delete_crime: 5 CrimeLab.get(getActivity()).removeCrime(mCrime); 6 getActivity().finish(); 7 return true; 8 default: 9 return super.onOptionsItemSelected(item); 10 } 11 }
6.運行效果: