Android+RecyclerView

来源:互联网 发布:生命安全教育网络测试 编辑:程序博客网 时间:2024/06/09 05:36

第一步:在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.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>
item_layout.xml

<?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"最后就可以看到瀑布流的效果了

原创粉丝点击