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

来源:互联网 发布:java版qq是什么意思 编辑:程序博客网 时间:2024/05/22 03:25

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


0 0
原创粉丝点击