android recycleview使用

来源:互联网 发布:澳大利亚学生签证知乎 编辑:程序博客网 时间:2024/06/06 15:42

android recycleview使用

RecyclerView是一个比ListView更灵活的一个控件,以后可以直接抛弃ListView了

Item 布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"          android:id="@+id/recycler_view_test_item_person_view"          android:orientation="vertical"          android:layout_width="match_parent"          android:layout_height="wrap_content"          android:padding="15dp"          android:background="#aabbcc"    ><TextView        android:id="@+id/recycler_view_test_item_person_name_tv"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:textSize="18sp"        android:background="#ccbbaa"        /><TextView        android:id="@+id/recycler_view_test_item_person_age_tv"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:paddingLeft="5dp"        android:background="#aaccbb"        android:textSize="15sp"        /></LinearLayout>

activity 布局

<android.support.v7.widget.RecyclerView            android:id="@+id/recycler_view_test_rv"            android:scrollbars="vertical"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:background="#bbccaa"            />

activity关键代码

recyclerView.setHasFixedSize(true);    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(context);    recyclerView.setLayoutManager(layoutManager);    initData();    adapter = new PersonAdapter(personList);    adapter.setOnRecyclerViewListener(this);    recyclerView.setAdapter(adapter);    这里有个layoutmanager的概念    也是不同于listview gridview的地方    可以轻松使用以上的效果 还能实现瀑布流

adapter

package com.wangjie.helloandroid.sample.recycler.person;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.LinearLayout;import android.widget.TextView;import com.wangjie.androidbucket.log.Logger;import com.wangjie.helloandroid.R;import java.util.List;public class PersonAdapter extends RecyclerView.Adapter {public static interface OnRecyclerViewListener {    void onItemClick(int position);    boolean onItemLongClick(int position);}private OnRecyclerViewListener onRecyclerViewListener;public void setOnRecyclerViewListener(OnRecyclerViewListener onRecyclerViewListener) {    this.onRecyclerViewListener = onRecyclerViewListener;}private static final String TAG = PersonAdapter.class.getSimpleName();private List<Person> list;public PersonAdapter(List<Person> list) {    this.list = list;}@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {    Logger.d(TAG, "onCreateViewHolder, i: " + i);    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recycler_view_test_item_person, null);    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);    view.setLayoutParams(lp);    return new PersonViewHolder(view);}@Overridepublic void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {    Logger.d(TAG, "onBindViewHolder, i: " + i + ", viewHolder: " + viewHolder);    PersonViewHolder holder = (PersonViewHolder) viewHolder;    holder.position = i;    Person person = list.get(i);    holder.nameTv.setText(person.getName());    holder.ageTv.setText(person.getAge() + "岁");}@Overridepublic int getItemCount() {    return list.size();}class PersonViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener{    public View rootView;    public TextView nameTv;    public TextView ageTv;    public int position;    public PersonViewHolder(View itemView) {        super(itemView);        nameTv = (TextView) itemView.findViewById(R.id.recycler_view_test_item_person_name_tv);        ageTv = (TextView) itemView.findViewById(R.id.recycler_view_test_item_person_age_tv);        rootView = itemView.findViewById(R.id.recycler_view_test_item_person_view);        rootView.setOnClickListener(this);        rootView.setOnLongClickListener(this);    }    @Override    public void onClick(View v) {        if (null != onRecyclerViewListener) {            onRecyclerViewListener.onItemClick(position);        }    }    @Override    public boolean onLongClick(View v) {        if(null != onRecyclerViewListener){            return onRecyclerViewListener.onItemLongClick(position);        }        return false;    }}}
0 1