package com.example.dell.recylerveiw; import android.support.annotation.NonNull; 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.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private RecyclerView recycler; private ArrayList<String> list; private Button click; private Button click2; private Button click3; private GridLayoutManager gridLayoutManager; private LinearLayoutManager linearLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate( savedInstanceState ); setContentView( R.layout.activity_main ); recycler = (RecyclerView) findViewById( R.id.recycler ); click = findViewById( R.id.click ); click2 = findViewById( R.id.click2 ); click3 = findViewById( R.id.click3 ); //模拟数据 list = new ArrayList<>(); for (int i = 0; i < 200; i++) { list.add( "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" ); list.add( "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" ); list.add( "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" ); list.add( "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" ); } //通过点击事件实现各种列表展示 click.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { linearLayoutManager = new LinearLayoutManager( MainActivity.this ); linearLayoutManager.setOrientation( LinearLayoutManager.VERTICAL ); //设置布局管理器 recycler.setLayoutManager( linearLayoutManager ); } } ); click.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { gridLayoutManager = new GridLayoutManager( MainActivity.this, 2 ); recycler.setLayoutManager( gridLayoutManager ); } } ); click3.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { //瀑布流 spanCount为列数 StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager( 2, StaggeredGridLayoutManager.VERTICAL ); recycler.setLayoutManager( staggeredGridLayoutManager ); } } ); //设置动画 recycler.setItemAnimator( new DefaultItemAnimator() ); //设置适配器 final MyAdapter myAdapter = new MyAdapter( MainActivity.this, list ); recycler.setAdapter( myAdapter ); //通过接口回调的方法 实现条目点击事件 myAdapter.setOnClickItem( new MyAdapter.setOnClickItem() { @Override public void setOnItemClickListener(int position) { Toast.makeText( MainActivity.this, position + "", Toast.LENGTH_SHORT ).show(); /*list.remove( position ); myAdapter.notifyDataSetChanged();*/ myAdapter.notifyItemRemoved( position ); } } ); } }
适配器
package com.example.dell.recylerveiw; import android.content.Context; import android.os.Handler; import android.os.Message; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.ArrayList; public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private Context context; private ArrayList<String> list; public MyAdapter(Context context, ArrayList<String> list) { this.context = context; this.list = list; } @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = View.inflate( context,R.layout.item,null ); MyViewHolder viewHolder = new MyViewHolder( view ); viewHolder.text = view.findViewById( R.id.textView ); return viewHolder; } @Override public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) { holder.text.setText( list.get( position ) ); holder.text.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { //Toast.makeText( context, position+"", Toast.LENGTH_SHORT ).show(); notifyItemRemoved( position ); listener.setOnItemClickListener( position ); handler.sendEmptyMessageDelayed( 1000,1000 ); } } ); } //条目动画 使用handler发送 private Handler handler = new Handler( ){ @Override public void handleMessage(Message msg) { super.handleMessage( msg ); if (msg.what == 1000){ notifyDataSetChanged(); } } }; @Override public int getItemCount() { return list.size(); } public class MyViewHolder extends RecyclerView.ViewHolder{ public MyViewHolder(View itemView) { super( itemView ); } TextView text; } //设置点击事件接口 public setOnClickItem listener; public void setOnClickItem( setOnClickItem listener){ this.listener = listener; } public interface setOnClickItem{ void setOnItemClickListener(int position); } }
activity_main.xml
//布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <Button android:id="@+id/click" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="点击切换" /> <Button android:id="@+id/click2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="点击切换2" /> <Button android:id="@+id/click3" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="点击切换3" /> <android.support.v7.widget.RecyclerView android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView> </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="match_parent" android:orientation="vertical"> <TextView android:id="@+id/textView" android:layout_margin="5dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="测试文字" android:textSize="20dp" /> <View android:layout_width="wrap_content" android:layout_height="2dp"/> </LinearLayout>