第一步:在build gradle中加依赖
compile 'com.android.support:recyclerview-v7:23.1.1' 为防止报这个错java.lang.NoClassDefFoundError: android.support.v4.animation.AnimatorCompatHelper
添加
configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested if (requested.group == 'com.android.support') { if (!requested.name.startsWith("multidex")) { details.useVersion '24.1.0' } } } } 第二步:activity_main.xmlitem_layout.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" android:orientation="vertical" tools:context="bawei.com.day.MainActivity"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:background="@color/colorPrimary" android:layout_height="?attr/actionBarSize" android:layout_width="match_parent" > </android.support.v7.widget.Toolbar> <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/rv_list" /> </LinearLayout>
<?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:orientation="vertical" android:layout_margin="8dp" android:background="@color/colorAccent" > <TextView android:id="@+id/tv_text" android:padding="20dp" android:textColor="#ffffff" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>res/menu/menu_main.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> <item android:id="@+id/menu_add" android:title="Add" android:orderInCategory="80" app:showAsAction="always" /> <item android:id="@+id/menu_del" android:title="Del" android:orderInCategory="80" app:showAsAction="always" /> <item android:id="@+id/menu_addmore" android:title="AddMore" android:orderInCategory="80" app:showAsAction="always" /> <item android:id="@+id/menu_move" android:title="Move" android:orderInCategory="80" app:showAsAction="always" /> </menu>RecyclerViewAdapter.java
package bawei.com.day; import android.content.Context; 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.ArrayList; /** * Created by Administrator on 2017/10/12. */ public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> { private LayoutInflater mLayoutInflater; private Context mContext; private ArrayList<String> mTitle=new ArrayList<>(); public RecyclerViewAdapter(Context context,ArrayList<String>title){ mContext=context; mTitle=title; mLayoutInflater=LayoutInflater.from(context); } public static class MyViewHolder extends RecyclerView.ViewHolder{ TextView mTextView; public MyViewHolder(View itemView) { super(itemView); mTextView=(TextView)itemView.findViewById(R.id.tv_text); } } public void remove(int position) { mTitle.remove(position); notifyItemRemoved(position); } public void add(String text, int position) { mTitle.add(position, text); notifyItemInserted(position); } @Override public RecyclerViewAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new MyViewHolder(mLayoutInflater.inflate(R.layout.item_layout,parent,false)); } @Override public void onBindViewHolder(RecyclerViewAdapter.MyViewHolder holder, int position) { holder.mTextView.setText(mTitle.get(position)); } @Override public int getItemCount() { return mTitle==null ? 0 : mTitle.size(); } }MainActivity.java
package bawei.com.day; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import java.util.ArrayList; import java.util.Collections; public class MainActivity extends AppCompatActivity { private RecyclerView mRecyclerView; //item 显示所需 private String[] title = {"JAVA","C","C++","C#","PYTHON","PHP" ,".NET","JAVASCRIPT","RUBY","PERL","VB","OC","SWIFT" }; private ArrayList<String> mTitle=new ArrayList<>(); private RecyclerViewAdapter mRecyclerViewAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Toolbar Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); //去除Toolbar标题 getSupportActionBar().setDisplayShowTitleEnabled(false); //设置菜单点击监听 toolbar.setOnMenuItemClickListener(onMenuItemClick); mRecyclerView = (RecyclerView) findViewById(R.id.rv_list); //LinearLayoutManager layoutManager = new LinearLayoutManager(this); StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL); //LinearLayoutManager layoutManager = new GridLayoutManager(this,4); //LinearLayout layoutManager=new StaggeredGridLayoutManager(4,this); //layoutManager.setOrientation(LinearLayoutManager.VERTICAL); // layoutManager.setOrientation(GridLayoutManager.VERTICAL); //layoutManager.setOrientation(StaggeredGridLayoutManager.VERTICAL); mRecyclerView.setLayoutManager(layoutManager); Collections.addAll(mTitle,title); //为RecyclerView添加默认动画效果,测试不写也可以 mRecyclerView.setItemAnimator(new DefaultItemAnimator()); mRecyclerView.setAdapter(mRecyclerViewAdapter=new RecyclerViewAdapter(this, mTitle)); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return super.onCreateOptionsMenu(menu); } private Toolbar.OnMenuItemClickListener onMenuItemClick = new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem menuItem) { switch (menuItem.getItemId()) { case R.id.menu_add: //添加模拟数据到第一项 mTitle.add(0, "www.lijizhou.com"); //RecyclerView列表进行UI数据更新 mRecyclerViewAdapter.notifyItemInserted(0); //如果在第一项添加模拟数据需要调用 scrollToPosition(0)把列表移动到顶端(可选) mRecyclerView.scrollToPosition(0); break; case R.id.menu_del: //删除模拟数据第一项 mTitle.remove(0); //RecyclerView 列表进行UI数据更新 mRecyclerViewAdapter.notifyItemRemoved(0); break; case R.id.menu_move: //列表中第二项移到第三项 进行UI数据更新 mRecyclerViewAdapter.notifyItemMoved(1,2); break; case R.id.menu_addmore: //模拟数据批量添加4条数据 mTitle.add(0,"test"); mTitle.add(0,"test1"); mTitle.add(0,"test2"); mTitle.add(0,"test3"); //RecyclerView列表进行批量UI数据更新 mRecyclerViewAdapter.notifyItemRangeInserted(0,4); // scrollToPosition(0)作用是把列表移动到顶端 mRecyclerView.scrollToPosition(0); break; } return true; } }; }最后一步:在style文件中加入
<style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style>在清单文件中加入
android:theme="@style/AppTheme.NoActionBar" 最后就可以看到瀑布流的效果了