RecycleView
RecyclerView是谷歌V7包下新增的控件,用来替代ListView的使用,在RecyclerView标准化了ViewHolder类似于ListView中convertView用来做视图复用。
RecyclerView有什么优点呢?
他可以通过设置LayoutManager来快速实现listview、gridview、瀑布流的效果,而且还可以设置横向和纵向显示,
ListVew GridView
RecycleView添加动画效果也非常简单(自带了ItemAnimation,可以设置加载和移除时的动画,方便做出各种动态浏览的效果),
控制Item的间隔 可以通过ItemDecoration
但RecycleVie并未自带点击响应事件方法,点击事件要自己写。
Google官方推荐使用。
RecycleView的使用方法:
1.要使用RecycleView首先要在build.gradle下引入jar包:
如我的是 compile 'com.android.support:recyclerview-v7:23.3.0'
2.在activityt_main.xml文件中简单定义:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/id_recycleview" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>3.在MainActivity中使用
public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private List<String> data; private ItemAdapter adapter;//自定义Adapter @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = (RecyclerView) findViewById(R.id.id_recycleview); initData(); adapter=new ItemAdapter(MainActivity.this, data); recyclerView.setAdapter(adapter); //设置RecycleView的布局管理 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); recyclerView.setLayoutManager(linearLayoutManager); //设置RecycleView的Item间分割线 DividerItemDecoration dector = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST); recyclerView.addItemDecoration(dector); //设置默认动画 recyclerView.setItemAnimator(new DefaultItemAnimator()); //添加点击Item事件 adapter.setOnItemClickListener(new SimpleAdapter.OnItemClickListener() { @Override public void onItemClick(View view, int position) { Toast.makeText(MainActivity.this,"Click:"+position,Toast.LENGTH_SHORT).show(); } @Override public void onLongItemClick(View view, int position) { Toast.makeText(MainActivity.this,"LongClick:"+position,Toast.LENGTH_SHORT).show(); } }); } //添加数据 private void initData() { data = new ArrayList<String>(); for (int i = 'A'; i <= 'Z'; i++) { data.add("" + (char) i); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } //菜单栏选择不同显示 @Override public boolean onOptionsItemSelected(MenuItem item) { int id=item.getItemId(); switch(id){ case R.id.action_add: adapter.addItem(1); break; case R.id.action_Delete: adapter.deleteItem(1); break; case R.id.action_listView://显示ListView recyclerView.setLayoutManager(new LinearLayoutManager(this)); break; case R.id.action_gridView://显示GridView recyclerView.setLayoutManager(new GridLayoutManager(this,3)); break; case R.id.action_hor_gridView://显示水平GridView recyclerView.setLayoutManager(new StaggeredGridLayoutManager(5,StaggeredGridLayoutManager.HORIZONTAL)); break; case R.id.action_staggered://显示瀑布流 break; default: break; } return super.onOptionsItemSelected(item); } }4.ItemAdapter的编写
public class ItemAdapter extends RecyclerView.Adapter<MyViewHolder>{ private List<String> data; private Context context; private LayoutInflater inflater; //自己编写一个按钮点击事件接口 public interface OnItemClickListener{ void onItemClick(View view,int position); void onLongItemClick(View view,int position); } public OnItemClickListener onItemClickListener; public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.onItemClickListener=onItemClickListener; } public ItemAdapter(Context context, List<String> data) { this.data = data; this.context = context; this.inflater = inflater.from(context); } //创建ViewHolder @Override public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View view=inflater.inflate(R.layout.simpleadapter,viewGroup,false); MyViewHolder viewHolder=new MyViewHolder(view); return viewHolder; } //绑定ViewHolder @Override public void onBindViewHolder(final MyViewHolder myViewHolder, final int i) { //设置值 myViewHolder.tv.setText(data.get(i)); if(onItemClickListener!=null){ myViewHolder.itemView.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { int LayoutPosition=myViewHolder.getLayoutPosition(); onItemClickListener.onItemClick(myViewHolder.itemView, LayoutPosition); } }); myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { int LayoutPosition=myViewHolder.getLayoutPosition(); onItemClickListener.onLongItemClick(myViewHolder.itemView,LayoutPosition); return false; } }); } } @Override public int getItemCount() { return data.size(); } public void addItem(int pos){ data.add(pos,"insert one"); notifyItemInserted(pos); } public void deleteItem(int pos){ data.remove(pos); notifyItemRemoved(pos); } } //创建ViewHolder类 class MyViewHolder extends ViewHolder { TextView tv; public MyViewHolder(View itemView) { super(itemView); tv= (TextView) itemView.findViewById(R.id.tv_adapter); } }ItemAdapter的xml布局包含一个TextView控件