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>