新建类
创建单例(CrimeLab.java)
public class CrimeLab {
private static CrimeLab sCrimeLab;
public static CrimeLab get(Context context){
if(sCrimeLab==null){
sCrimeLab =new CrimeLab(context);
}
return sCrimeLab;
}
private CrimeLab(Context context){}
}
8-2 创建可容纳Crime对象的List(CrimeLab.java)
private List<Crime> mCrimes;
mCrimes=new ArrayList<>();
}
public List<Crime> getmCrimes(){
return mCrimes;
}
public Crime getCrime(UUID id) {
for (Crime crime : mCrimes) {
if (crime.getmId().equals(id)) {
return crime;
}
}
return null;
}
8-3 生成100个crime(CrimeLab.java)
mCrimes=new ArrayList<>();
for (int i=0;i<100;i++){
Crime crime=new Crime();
crime.setmTitle("Crime #"+i);
crime.setSolved(i%2==0);//Every other one
mCrimes.add(crime);
}
8-4 通用的布局定义文件activity_crime.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/frament_container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
更改activity_crime.xml更名为activity_fragment.xml.
8-5 为CrimeActivity更新布局文件引用(CrimeActivity.java)
此版本会自动更新
8.6建一个名为SingleFragmentActivity的抽象类
8-7复制代码
protected abstract Fragment createFragment();
此段为crimeActivity.java中复制
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);
FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.frament_container);
if (fragment == null) {
fragment = new CrimeFragment();
fm.beginTransaction()
.add(R.id.frament_container, fragment)
.commit();
}
}
8-9清理CrimeActivity类(CrimeActivity.java)
@Override
protected Fragment createFragment(){
return new CrimeFragment();
对CrimeActivity中的代码进行删改,达到下图效果
新建控制类
新建CrimeListActivity
public class CrimeListActivity extends SingleFragmentActivity {
@Override
protected Fragment createFragment() {
return new CrimeListFragment();
}
}
新建CrimeListFragment
public class CrimeListFragment extends Fragment {
//Nothing yet
}
声明CrimeListActivity为launcher activity(AndroidManifest.xml)
在上面红框处添加
<activity android:name=".CrimeListActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
删掉下面的代码
添加支援库
file ——ProjectStructure
输入库recyclerview-v7
创建布局文件
单击res/layout目录——new——Layout resource file
命名为fragment_crime_list,
8-15 在布局文件中添加RecyclerView视图(fragment_crime_list.xml)
<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/crime_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
8-16为CrimeListFragment配置视图(CrimeListFragment.java)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_crime_list, container, false);
mCrimeRecyclerView = (RecyclerView) view
.findViewById(R.id.crime_recycler_view);
mCrimeRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
return view;
}
}
8-17定义ViewHolder内部类(CrimeListFragment.java)
private class CrimeHolder extends RecyclerView.ViewHolder {
public CrimeHolder(LayoutInflater inflater, ViewGroup parent) {
super(inflater.inflate(R.layout.list_item_crime, parent, false));
}
}
8-18 创建Adapter内部类(CrimeListFragment.java)
private abstract class CrimeAdapter extends RecyclerView.Adapter<CrimeHolder>{
private List<Crime> mCrimes;
public CrimeAdapter(List<Crime>crimes){
mCrimes=crimes;
}
}
武装CrimeAdapte(CrimeListFragment.java)
@Override
public CrimeHolder onCreateViewHolder(ViewGroup parent, int viewType){
LayoutInflater layoutInflater=LayoutInflater.from(getActivity());
return new CrimeHolder(layoutInflater, parent);
}
@Override
public void onBindViewHolder(CrimeHolder holder,int position){
}
@Override
public int getItemCount(){
return mCrimes.size();
}
8-20设置Adapter((CrimeListFragment.java)
private CrimeAdapter mAdapter;
uadateUI();
private void uadateUI(){
CrimeLab crimeLab=CrimeLab.get(getActivity());
List<Crime>crimes=crimeLab.getmCrimes();
mAdapter = new CrimeAdapter(crimes);
mCrimeRecyclerView.setAdapter(mAdapter);
}
8-21在构造方法中实例化视图组件(CrimelistFragment.java)
private TextView mTitleTextView;
private TextView mDateTextView;
mTitleTextView = (TextView) itemView.findViewById(R.id.crime_title);
mDateTextView = (TextView) itemView.findViewById(R.id.crime_date);
8-22 实现bind(Crime)方法(CrimeListFragment.java)
private Crime mCrime;
public void bind(Crime crime) {
mCrime = crime;
mTitleTextView.setText(mCrime.getTitle());
mDateTextView.setText(mCrime.getDate().toString());
}
8-23调用bind(Crime)方法(CrimeListFrag.java)
Crime crime = mCrimes.get(position);
holder.bind(crime);
检测
8-24 检测用户点击事件(CrimeListFragment.java)
implements View.OnClickListener
itemView.setOnClickListener(this);
@Override
public void onClick(View view) {
Toast.makeText(getActivity(),
mCrime.getTitle() + " clicked!", Toast.LENGTH_SHORT)
.show();
}