以前,我们要显示一个列表用的都是Listview+adapter,但是如果有多个类别使用Listeview就比较麻烦,而RecycleView却可以简单实现很多效果
首先,第一步,在layout-activity_main.xml中,加入Recycle的布局,这里就给一些基本的属性,如果想加其他属性可以自己加
<android.support.v7.widget.RecyclerView android:id="@+id/rv_task_list" android:layout_width="match_parent" android:layout_height="wrap_content" />
第二步,在MainActivity里面
package com.bolu.jpad.activities; import android.content.Intent; import android.graphics.Rect; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import com.bolu.jpad.beans.TaskList; import com.bolu.jpad.beans.TaskManager; import com.zhy.base.adapter.ViewHolder; import com.zhy.base.adapter.recyclerview.OnItemClickListener; import com.zhy.base.adapter.recyclerview.support.SectionAdapter; import com.zhy.base.adapter.recyclerview.support.SectionSupport; import java.util.ArrayList; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; public class TaskListActivity extends AppCompatActivity { private static final int EDU_TYPE = 0; private static final int LABOR_TYPE = 1; public static final String EDU_DATA = "edu_data"; public static final String LABOR_DATA = "labor_data"; public static final String TYPE_DATA = "tape_data"; public static final int TYPE_DATA_EDU = 5; public static final int TYPE_DATA_LABOR = 6; @Bind(R.id.toolbar) Toolbar toolbar; @Bind(R.id.rv_task_list) RecyclerView rvTaskList; private List<TaskList> mList = new ArrayList<>(); private TaskManager.EduListBean eduList=new TaskManager.EduListBean(); private TaskManager.LaborListBean laborListBean=new TaskManager.LaborListBean(); private List<TaskManager> taskManagers; public static final String EDU_LIST = "eduList";List<TaskManager.EduListBean> eduListBeanList; List<TaskManager.LaborListBean> getLaborList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_task_list); ButterKnife.bind(this); taskManagers = (List<TaskManager>) getIntent().getSerializableExtra(FunctionActivity.EDU_LIST); initDatas();//设置toolbar样式 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); toolbar.setBackgroundResource(R.drawable.actionbar_background); toolbar.setNavigationIcon(R.mipmap.arrow_prev);//设置Recycleview的item之间的间距为30 int spacingInPixels =30; rvTaskList.addItemDecoration(new SpacesItemDecoration(spacingInPixels)); //设置recycleview的布局是垂直显示 LinearLayoutManager llm = new LinearLayoutManager(this); llm.setOrientation(LinearLayoutManager.VERTICAL); rvTaskList.setLayoutManager(llm); SectionSupport<TaskList> sectionSupport = new SectionSupport<TaskList>() { @Override//找到头文件的布局以及他的id public int sectionHeaderLayoutId() { return R.layout.layout_task_header; } @Override public int sectionTitleTextViewId() { return R.id.tv_tasktype; } //截取头文件的前四个字符串 @Override public String getTitle(TaskList s) { return s.getTitle().substring(0,4); } }; //将内容设置到适配器中 SectionAdapter<TaskList> adapter = new SectionAdapter<TaskList>(this, R.layout.listitem_tasks_details, mList, sectionSupport) { @Override public void convert(ViewHolder holder, TaskList taskList) { holder.setText(R.id.tv_task, taskList.getTitle().substring(4)); } };//给item设置点击事件(可以直接通过adapter.setOnItemClickListener) adapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(ViewGroup parent, View view, Object o, int position) { Intent intent = new Intent(TaskListActivity.this, CheckTaskActivity.class); switch (mList.get(position).getType()) { case EDU_TYPE: TaskManager.EduListBean eduListBean = eduListBeanList.get(position); intent.putExtra(EDU_DATA, eduListBean); intent.putExtra(TYPE_DATA, TYPE_DATA_EDU); break; case LABOR_TYPE: int currentPosition = position - eduListBeanList.size(); TaskManager.LaborListBean laborListBean = getLaborList.get(currentPosition); intent.putExtra(LABOR_DATA,laborListBean); intent.putExtra(TYPE_DATA, TYPE_DATA_LABOR); break; } startActivity(intent); } @Override public boolean onItemLongClick(ViewGroup parent, View view, Object o, int position) { return false; } }); rvTaskList.setAdapter(adapter); } private void initDatas() { for(TaskManager taskManager : taskManagers) { //集中教育 eduListBeanList = taskManager.getEduList(); for(TaskManager.EduListBean eduListBean : eduListBeanList) { TaskList taskList = new TaskList(); taskList.setTitle("集中教育"+eduListBean.getE_title()); taskList.setType(EDU_TYPE); mList.add(taskList); } //社区服务 getLaborList = taskManager.getLaborList(); for(TaskManager.LaborListBean laborListBean : getLaborList) { TaskList taskList = new TaskList(); taskList.setTitle("社区服务"+laborListBean.getL_title()); taskList.setType(LABOR_TYPE); mList.add(taskList); } } } //Activity返回到上一个activity public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); return true; } return super.onOptionsItemSelected(item); } public class SpacesItemDecoration extends RecyclerView.ItemDecoration { private int space; public SpacesItemDecoration(int space) { this.space = space; } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { outRect.left = space; outRect.right = space; outRect.bottom = space; // Add top margin only for the first item to avoid double space between items if (parent.getChildPosition(view) == 0) outRect.top = space; } } }