RecyclerView學習demo

寫個demo說明:
1、build.gradle中配置包:

 compile 'com.android.support:recyclerview-v7:23.0.+'

2、activity_main.xml中使用;

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.recyclerview.MainActivity">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical">
    </android.support.v7.widget.RecyclerView>
</RelativeLayout>

3、編輯Adapter:

package com.recyclerview;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.List;


/**
 * Created by c9736 on 2017/1/5.
 */

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{

    public interface OnItemListener{
        void onItemClick(View view, int position);
        void onItemLongClick(View view , int position);

    }

    private OnItemListener onItemListener;

    public void setOnItemListener(OnItemListener onItemListener) {
        this.onItemListener = onItemListener;
    }

    private List<String> datas;
    public MyAdapter (List<String>  datas){
        this.datas=datas;
    }
    public void addData(int position){
        datas.add(position,"insert"+position);
        notifyItemInserted(position);
    }
    public void removeData(int position){
        datas.remove(position);
        notifyItemRemoved(position);
    }
    //創建新view
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.item,parent,false);
        ViewHolder viewHolder=new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {

        holder.textView.setText(datas.get(position));
        if(onItemListener!=null){
            holder.textView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int pos=holder.getLayoutPosition();
                    onItemListener.onItemClick(holder.itemView,pos);
                }
            });
            holder.textView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View view) {
                    int pos=holder.getLayoutPosition();
                    onItemListener.onItemLongClick(holder.itemView,pos);
                    return false;
                }
            });
        }
    }

    @Override
    public int getItemCount() {
        return datas.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder{
        public TextView textView;
        public ViewHolder(View view) {
            super(view);
            textView= (TextView) view.findViewById(R.id.textView);


        }
    }
}

4、activity中使用;

package com.recyclerview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private List<String> mDatas;
    RecyclerView recyclerView=null;
    RecyclerView.LayoutManager layoutManager=null;
    MyAdapter myAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initDatas();
        recyclerView= (RecyclerView) findViewById(R.id.recycler);
        //layoutManager=new LinearLayoutManager(this);//使用LinearyLayout佈局顯示
        //layoutManager=new GridLayoutManager(this,4);//使用GridLayout方式顯示,每行顯示4個
        //layoutManager=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);//使用瀑布流式佈局 VERTICAL代表有2列
        layoutManager=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.HORIZONTAL);//使用瀑布流式佈局 HORIZONTAL代表有2行


        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(true);
        myAdapter=new MyAdapter(mDatas);
        myAdapter.setOnItemListener(new MyAdapter.OnItemListener() {
            @Override
            public void onItemClick(View view, int position) {
                Toast.makeText(getApplicationContext(), position + " click",
                        Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onItemLongClick(View view, int position) {
                Toast.makeText(getApplicationContext(), position + " long click",
                        Toast.LENGTH_SHORT).show();
                myAdapter.removeData(position);
            }
        });
        recyclerView.setAdapter(myAdapter);
        //添加動畫
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        //設置分隔 LayoutManager適用,DividerItemDecoration類沒有提供,可以從網上拷貝來
       /* recyclerView.addItemDecoration(new DividerItemDecoration(this,
                DividerItemDecoration.VERTICAL_LIST));*/




    }

    private void initDatas() {
        mDatas = new ArrayList<String>();
        for (int i = 'A'; i < 'z'; i++)
        {
            mDatas.add("" + (char) i);
        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.add:
                myAdapter.addData(1);
                break;
            case R.id.remove:
                myAdapter.removeData(1);
                break;
        }
        return true;
    }

}

6、菜單欄佈局;

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/add"
        android:title="add"
      />
    <item
        android:id="@+id/remove"
        android:title="remove"
      />

</menu>

7、item佈局;

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="2dp">

    <TextView
        android:id="@+id/textView"
        android:textSize="20sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章