RecyclerView替代Listview,实现滚动列表的显示

以前,我们要显示一个列表用的都是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;
        }
    }


}

 
 

猜你喜欢

转载自blog.csdn.net/xiaoqinyun/article/details/51724798