忙了两个星期,又回来了,终于轻松一阵了,哈哈哈哈哈,有时间写了!嘚瑟一下,挑战练习走起
这里直接使用List的remove(Object object)方法就行,具体怎么加工具栏的删除图标就不说了,和书上一样,直接放关键代码:
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/**
* 告诉FragmentManager,器管理的fragment应接收onCreateOptionsMenu()方法的调用指令
*/
setHasOptionsMenu(true);
crimeId = (UUID) getArguments().getSerializable(ARG_CRIME_ID);
mCrime = CrimeLab.get(getActivity()).getCrime(crimeId);
}
这里一定要记得在onCreate的方法里面加上setHasOptionsMenu(true)以便之后调用onCreateOptionsMenu方法
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.fragment_crime, menu);
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.delete_item:
Crime crime = CrimeLab.get(getActivity()).getCrime(crimeId);
CrimeLab.get(getActivity()).deleteCrime(crime);
getActivity().finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
这里设置点击事件,获得到当前item的UUID,在单例类的List里面找到对应的crime,再调用CrimeLab的delete方法删除,这个delete是我自己新加上去的,代码如下(加黑倾斜的那个):
public class CrimeLab {
private static CrimeLab sCrimeLab;
private List mCrimes;
public static CrimeLab get(Context context) {
if (sCrimeLab == null) {
sCrimeLab = new CrimeLab(context);
}
return sCrimeLab;
}
private CrimeLab(Context context) {
mCrimes = new ArrayList<>();
}
public void addCrime(Crime c) {
mCrimes.add(c);
}
public void deleteCrime(Crime c) {
mCrimes.remove(c);
}
public List getCrimes() {
return mCrimes;
}
public Crime getCrime(UUID id) {
for(Crime crime : mCrimes) {
if (crime.getId().equals(id)) {
return crime;
}
}
return null;
}
}
第一题重要的就是上面这些,下一题。
这题很奇葩,因为这本书的作者不是中国人,估计没考虑周全,把第二题的代码放上去后,当item只有一个的时候还是显示复数形式,查了一下,要把手机语言换成英文才能正常显示,第二题要注意的就只有这点
这题我直接改了一下布局文件,然后在代码里面判断是否有值,然后显示不同的布局即可,就是通过View.VISIBLE,View.GONE来实现显示,但是题目里面说添加一个按钮方便永和直接创建新的crime记录,感觉必要不是很大,因为工具栏本身就有一个添加按钮,在加一个有点多余,当然,加一个按钮跳转到CrimePagerActivity也可以,就是逻辑上感觉说不通,所以我没加。本题主要代码如下:
private void updataSuntitle() {
CrimeLab crimeLab = CrimeLab.get(getActivity());
/**
* 判断语句,判断是否有item
*/
int crimeSize = crimeLab.getCrimes().size();
String subtitle = getResources().getQuantityString(R.plurals.subtitle_plural, crimeSize, crimeSize);
if (crimeSize != 0) {
subtitle = getResources().getQuantityString(R.plurals.subtitle_plural, crimeSize, crimeSize);
mCrimeRecyclerview.setVisibility(View.VISIBLE);
mTextView.setVisibility(View.GONE);
} else {
mCrimeRecyclerview.setVisibility(View.GONE);
mTextView.setVisibility(View.VISIBLE);
}
if (!mSubtitleVisible) {
subtitle = null;
}
AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.getSupportActionBar().setSubtitle(subtitle);
}
三题结束,两周没写,可能有些不足之处,希望大家多多提出,谢谢 : )
源码链接:Demo