今天更新的是一个RecyclerView的使用,首先它是实现了点击按钮实现的一系列功能
这是它的一个效果图,然后点击按钮可以实现相应的功能,XML不多说了,直接copy
Mainactivity.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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
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"/>
</LinearLayout>
recycleview_item (可以按照需求定义,我用的就是一个图片加一段数字)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:padding="5dp">
<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>
</RelativeLayout>
创建完布局之后,我们就要写相对应的逻辑代码了
那么首先我们要清楚实现RecyclerView的一些步骤,实现RecyclerView的adapter,然后要用于主类调用方法,接下来我们就先来解读RecyclerView.Adapter
下面是适配器的实现思路
1. 继承RecycleView的adapter
2. 写ViewHolder
3. 在继承RecyclerView.Adapter的类型泛型定义为这个ViewHolder4. 创建构造方法,把外界的上下文和数据传递到适配器中。
5. 通过mViewHolder获取到控件对象。
6. 在onBindViewHolder方法中进行赋值。
代码如下(含注释):
public class MyRecycleViewAdapter extends RecyclerView.Adapter<MyRecycleViewAdapter.mViewholder>{
//通过构造函数得到外界的上下文和数据
private final Context context;
private ArrayList<String> datas;
public MyRecycleViewAdapter(Context context, ArrayList<String> datas){
this.context = context;
this.datas = datas;
}
//相当
@Override
public mViewholder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = View.inflate(context,R.layout.item_recycleview,null);
//创建viewholder对象
mViewholder mViewholder = new mViewholder(itemView);
return mViewholder;
}
@Override
public int getItemCount() {
return datas.size();
}
class mViewholder extends RecyclerView.ViewHolder{
//控件对象
private ImageView iv_icon;
private TextView tv_title;
public mViewholder(View itemView) {
super(itemView);
iv_icon = (ImageView) itemView.findViewById(R.id.iv_icon);
tv_title = (TextView) itemView.findViewById(R.id.tv_title);
//low点击事件
iv_icon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//获取用户点击item的位置
Toast.makeText(context,"用户点击的图片="+getLayoutPosition(),Toast.LENGTH_LONG).show();
}
});
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(monItemClickListener!=null){
monItemClickListener.onItemclic(v,datas.get(getLayoutPosition()));
}
}
});
}
}
interface onItemClickListener{
/**
* 抽象方法,当recycleview某个被点击的时候回调
* @param view 点击的item对象
* @param data 点击时的数据
*/
void onItemclic(View view,String data);
}
//创建接口
private onItemClickListener monItemClickListener;
//设置recycleview的某个监听
public void setOnItemClickListener(onItemClickListener onItemClickListener){
monItemClickListener=onItemClickListener;
}
//相当于getview绑定数据不符的代码,数据和View绑定。
@Override
public void onBindViewHolder(mViewholder holder, int position) {
//根据item得到对应的数据
String data = datas.get(position);
//通过holder对象给控件设置数据
holder.tv_title.setText(data);
}
//添加方法
public void addData(int i, String name) {
datas.add(i,name);
notifyDataSetChanged();
}
//删除方法
public void removeData(int i) {
datas.remove(i);
//更新局部条目,预防重新加载全部布局。
// notifyItemRemoved(0);
//更新
notifyDataSetChanged();
}
}
然后下面我们运行的是Mainactivity类,这里我们执行的是点击事件的操作
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 MyRecycleViewAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initdata();
//设置适配器
adapter = new MyRecycleViewAdapter(this, datas);
recyclerview.setAdapter(adapter);
recyclerview.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
adapter.setOnItemClickListener(new MyRecycleViewAdapter.onItemClickListener() {
@Override
public void onItemclic(View view, String data) {
Toast.makeText(MainActivity.this,"点击了"+data+"条目",Toast.LENGTH_SHORT).show();
}
});
}
private void initdata() {
datas = new ArrayList<>();
//准备数据集合
for (int i = 0; i < 100; i++) {
datas.add("Content_" + i);
}
}
private void initView() {
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);
//设置点击事件
btn_add.setOnClickListener(this);
btn_delete.setOnClickListener(this);
btn_list.setOnClickListener(this);
btn_grid.setOnClickListener(this);
btn_flow.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_add://D.添加数据
adapter.addData(0,"666666");
break;
case R.id.btn_delete://D.删除数据
adapter.removeData(0);
recyclerview.scrollToPosition(55);
break;
case R.id.btn_list://设置List类型效果
recyclerview.setLayoutManager(new GridLayoutManager(this,1,LinearLayoutManager.VERTICAL,false));
break;
case R.id.btn_grid://设置Grid类型效果
recyclerview.setLayoutManager(new GridLayoutManager(this,2, GridLayoutManager.VERTICAL,false));
break;
case R.id.btn_flow://设置瀑布流类型效果
break;
}
}
}
在MainActivity中我们要用到LayoutManager的管理者对象来控制条目的排列,控制其显示的方式
有人会发现关于瀑布流的代码还没有
这里本人会在下一篇更新,敬请关注