使用
1、添加依賴
無論從IDE設置項目環境中搜索添加依賴還是在Gradle的配置文件中添加均可,是標準的RecyclerView就行
因爲沒有找到網上所謂的v7支持包中的,個人使用最新androidx合成系列中的RecyclerView
implementation ‘androidx.recyclerview:recyclerview:1.1.0’
2、資源文件
(具體配置項視個人佈局而定)
<androidx.recyclerview.widget.RecyclerView
app:layout_constraintTop_toTopOf=“parent”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:id="@+id/search_list"/>
3、定義適配器
//先定義ViewHolder佈局塊類,再寫入泛型
public class JobsAdapter extends RecyclerView.Adapter<JobsAdapter.ViewHolder> {
private List<Job> jobs;
public JobsAdapter(List<Job> jobList){
jobs = jobList;
}
static class ViewHolder extends RecyclerView.ViewHolder {
TextView jobCategory,jobDuration,jobPosition,jobSalary,jobDate;
private ViewHolder (View view) {
super(view);
jobCategory = view.findViewById(R.id.job_category);
jobDuration = view.findViewById(R.id.job_duration);
jobPosition = view.findViewById(R.id.job_position);
jobSalary = view.findViewById(R.id.job_salary);
jobDate = view.findViewById(R.id.job_date);
}
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_job,parent,false);
return new ViewHolder(view,onItemClickListener);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Job job = jobs.get(position);
holder.jobCategory.setText(job.getCategory());
holder.jobDuration.setText(job.getDuration());
holder.jobSalary.setText(job.getSalary());
holder.jobDate.setText(job.getDate());
}
@Override
public int getItemCount() {
return jobs.size();
}
}
實現監聽
因爲RecyclerView並沒有自帶的單擊長按事件監聽,主要通過個人自定義實現:
1、自定義監聽
在適配器中定義接口與方法
在ViewHolder實現單擊事件的回調
這樣通過適配器設置了監聽器,每個ViewHolder被點擊都會使用onItemClick接口方法(個人重寫)
public class JobsAdapter extends RecyclerView.Adapter<JobsAdapter.ViewHolder> {
private List<Job> jobs;
private OnItemClickListener onItemClickListener;
public JobsAdapter(List<Job> jobList){
jobs = jobList;
}
static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView jobCategory,jobDuration,jobPosition,jobSalary,jobDate;
OnItemClickListener onItemClickListener;
private ViewHolder (View view,OnItemClickListener onItemClickListener) {
super(view);
jobCategory = view.findViewById(R.id.job_category);
jobDuration = view.findViewById(R.id.job_duration);
jobPosition = view.findViewById(R.id.job_position);
jobSalary = view.findViewById(R.id.job_salary);
jobDate = view.findViewById(R.id.job_date);
this.onItemClickListener = onItemClickListener;
view.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(onItemClickListener != null)
onItemClickListener.onItemClick(getAdapterPosition());
}
}
public interface OnItemClickListener{
void onItemClick(int postion);
}
public void setItemClickListener(OnItemClickListener onItemClickListener){
this.onItemClickListener = onItemClickListener;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_job,parent,false);
return new ViewHolder(view,onItemClickListener);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Job job = jobs.get(position);
holder.jobCategory.setText(job.getCategory());
holder.jobDuration.setText(job.getDuration());
holder.jobSalary.setText(job.getSalary());
holder.jobDate.setText(job.getDate());
}
@Override
public int getItemCount() {
return jobs.size();
}
}
JobsAdapter adapter = new JobsAdapter(jobs);
adapter.setItemClickListener(new JobsAdapter.OnItemClickListener() {
@Override
public void onItemClick(int postion) {
Intent intent = new Intent(SearchActivity.this,DetailActivity.class);
intent.putExtra("job",jobs.get(postion));
startActivity(intent);
}
});
searchList.setAdapter(adapter);
2、使用OnItemTouchListener攔截動作進行控制(暫時沒有研究)