MyTetra Share
Делитесь знаниями!
CrimeListFragment.java
21.04.2017
10:47
Раздел: Android - books - AndroidProgramming2e - 10 Аргументы фрагментов
CrimeListFragment.java
package com.bignerdranch.android.criminalintent; 
 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.CheckBox; 
import android.widget.TextView; 
 
import java.util.List; 
 
public class CrimeListFragment extends Fragment { 
 
    private RecyclerView mCrimeRecyclerView; 
    private CrimeAdapter mAdapter; 
 
    @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())); 
 
        updateUI(); 
 
        return view; 
    } 
 
//    В классе CrimeListFragment переопределите onResume() и инициируйте вызов 
//    updateUI() для перезагрузки списка. Измените метод updateUI() для вызова 
//    notifyDataSetChanged(), если объект CrimeAdapter уже создан. 
 
    @Override 
    public void onResume() { 
        super.onResume(); 
        updateUI(); 
    } 
 
    private void updateUI() { 
        CrimeLab crimeLab = CrimeLab.get(getActivity()); 
        List<Crime> crimes = crimeLab.getCrimes(); 
 
        if (mAdapter == null) { 
            mAdapter = new CrimeAdapter(crimes); 
            mCrimeRecyclerView.setAdapter(mAdapter); 
        } else { 
            mAdapter.notifyDataSetChanged(); 
        } 
    } 
 
    private class CrimeHolder extends RecyclerView.ViewHolder  
            implements View.OnClickListener { 
 
        private TextView mTitleTextView; 
        private TextView mDateTextView; 
        private CheckBox mSolvedCheckBox; 
 
        private Crime mCrime; 
 
        public CrimeHolder(View itemView) { 
            super(itemView); 
            itemView.setOnClickListener(this); 
 
            mTitleTextView = (TextView) itemView.findViewById(R.id.list_item_crime_title_text_view); 
            mDateTextView = (TextView) itemView.findViewById(R.id.list_item_crime_date_text_view); 
            mSolvedCheckBox = (CheckBox) itemView.findViewById(R.id.list_item_crime_solved_check_box); 
        } 
 
        public void bindCrime(Crime crime) { 
            mCrime = crime; 
            mTitleTextView.setText(mCrime.getTitle()); 
            mDateTextView.setText(mCrime.getDate().toString()); 
            mSolvedCheckBox.setChecked(mCrime.isSolved()); 
        } 
 
        @Override 
//        Запуск активности из фрагмента осуществляется практически так же, как запуск активности из другой активности. Вы вызываете метод Fragment.startActivity(Intent), который вызывает соответствующий метод Activity во внутренней реализации. CrimeListFragment использует метод getActivity() для передачи активности-хоста как объекта Context, необходимого конструктору Intent 
        public void onClick(View v) { 
            Intent intent = CrimeActivity.newIntent(getActivity(), mCrime.getId()); 
            startActivity(intent); 
        } 
    } 
 
    private class CrimeAdapter extends RecyclerView.Adapter<CrimeHolder> { 
 
        private List<Crime> mCrimes; 
 
        public CrimeAdapter(List<Crime> crimes) { 
            mCrimes = crimes; 
        } 
 
        @Override 
        public CrimeHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
            LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); 
            View view = layoutInflater.inflate(R.layout.list_item_crime, parent, false); 
            return new CrimeHolder(view); 
        } 
 
        @Override 
        public void onBindViewHolder(CrimeHolder holder, int position) { 
            Crime crime = mCrimes.get(position); 
            holder.bindCrime(crime); 
        } 
 
        @Override 
        public int getItemCount() { 
            return mCrimes.size(); 
        } 
    } 
} 

 
MyTetra Share v.0.52
Яндекс индекс цитирования