上来就是干
ManiActivity:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn_add;
private Button btn_delete;
private Button btn_list;
private Button btn_grid;
private Button btn_flow;
private RecyclerView recyclerview;
private ArrayList<String> datas;
private MyRecyclerView adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_add = (Button) findViewById(R.id.btn_add);
btn_delete = (Button) findViewById(R.id.btn_delete);
btn_list = (Button) findViewById(R.id.btn_list);
btn_grid = (Button) findViewById(R.id.btn_grid);
btn_flow = (Button) findViewById(R.id.btn_flow);
recyclerview = (RecyclerView) findViewById(R.id.recyclerview);
initData();
//设置点击事件
btn_add.setOnClickListener(this);
btn_delete.setOnClickListener(this);
btn_list.setOnClickListener(this);
btn_grid.setOnClickListener(this);
btn_flow.setOnClickListener(this);
//设置RecyclerView的适配器
adapter = new MyRecyclerView(this,datas);
recyclerview.setAdapter(adapter);
//设置布局的管理器
recyclerview.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
adapter.setOnItemClickListenet(new MyRecyclerView.onItemClickListenet() {
@Override
public void onItemClick(View view, String data) {
Toast.makeText(MainActivity.this, data+"", Toast.LENGTH_SHORT).show();
}
});
//加分隔符
recyclerview.addItemDecoration(new DividerListItemDecoration(this,DividerListItemDecoration.VERTICAL_LIST));
//设置动画
recyclerview.setItemAnimator(new DefaultItemAnimator());
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_add://D.添加数据
adapter.add(0,"哈哈哈");
break;
case R.id.btn_delete://D.删除数据
adapter.removeData(0);
break;
case R.id.btn_list://设置List类型效果
recyclerview.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
break;
case R.id.btn_grid://设置Grid类型效果
recyclerview.setLayoutManager(new GridLayoutManager(this,3,LinearLayoutManager.VERTICAL,false));
break;
case R.id.btn_flow://设置瀑布流类型效果
recyclerview.setLayoutManager(new StaggeredGridLayoutManager(3,LinearLayoutManager.VERTICAL));
break;
}
}
private void initData() {
datas = new ArrayList<>();
//准备数据集合
for (int i = 0; i < 100; i++) {
datas.add("Content_" + i);
}
}
}
ManiActivity XML布局:
<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"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/btn_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="添加" android:textAllCaps="false" /> <Button android:id="@+id/btn_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="删除" android:textAllCaps="false" /> <Button android:id="@+id/btn_list" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="List" android:textAllCaps="false" /> <Button android:id="@+id/btn_grid" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="Grid" android:textAllCaps="false" /> <Button android:id="@+id/btn_flow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="flow" android:textAllCaps="false" /> </LinearLayout> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView> </LinearLayout>
RecyclerView适配器:
public class MyRecyclerView extends RecyclerView.Adapter<MyRecyclerView.MyViewHolder> {
private Context context;
private List<String> datas;
public MyRecyclerView(Context context, List<String> datas) {
this.context = context;
this.datas = datas;
}
//相当于GitView,创建View对象及ViewHolder对象
@Override
public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
//把一个XML布局转换为View对象
View itemView = View.inflate(context, R.layout.item_recyclerview, null);
//创建ViewHolder对象
MyViewHolder holder = new MyViewHolder(itemView);
//返回ViewHolder
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder myViewHolder, int i) {
//根据item位置得到对应的数据
String s = datas.get(i);
//给Holder里面的数据设置对象
myViewHolder.tv_title.setText(s);
}
@Override
public int getItemCount() {
return datas.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private ImageView iv_icon;
private TextView tv_title;
public MyViewHolder(View itemView) {
super(itemView);
iv_icon= (ImageView) itemView.findViewById(R.id.iv_icon);
tv_title= (TextView) itemView.findViewById(R.id.tv_title);
iv_icon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context,getPosition()+"",Toast.LENGTH_LONG).show();
}
});
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(monItemClickListenet != null){
monItemClickListenet.onItemClick(v,datas.get(getPosition()));
}
}
});
}
}
interface onItemClickListenet{
/**
* 抽象方法,当RecyclerView某个对象被点击是回调
* @param view 点击item对象
* @param data 点击时的数据
*/
void onItemClick(View view,String data );
}
//创建接口
private onItemClickListenet monItemClickListenet;
public void setOnItemClickListenet( onItemClickListenet ItemClicklistenet){
monItemClickListenet=ItemClicklistenet;
}
//添加
public void add(int i,String name){
datas.add(0,name);
notifyDataSetChanged();
}
//删除
public void removeData(int i) {
datas.remove(i);
notifyDataSetChanged();
}
}
RecyclerView适配器 XML布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#22000000" android:gravity="center" android:orientation="horizontal" android:padding="5dp"> <ImageView android:id="@+id/iv_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher" /> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="3dp" android:text="Content" android:textAllCaps="false" android:textColor="#000000" /> </LinearLayout> </LinearLayout>