终于开始我的一篇博客了。有时间会陆续的把自己的积累写下来。废话不说,开始。很久之前就听别人说RecyclerView,一直想使用,看也没有仔细看过,主要是使用eclipse开发的时候不会引入jar。刚刚转到Android Studio,终于可以愉快的使用了。
第一次使用RecyclerView控件,决定实现一个文本列表,大神请忽视。于是新建布局文件item。含有TextView
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
使用列表,肯定是要自定义Adapter,于是就有了MyAdapter。集成自RecyclerView.Adapter
泛型为我自己的Holder。之前集成BaseAdapter的时候,都是自己在getView方法中,自己写Holder。在这里是在onCreateViewHolder中绑定item布局。然后返回到ViewHolder中。在Holder中绑定文本id。接下来就是在onBindViewHolder中愉快的绑定数据了。
最后不要忘记 recyclerView.setAdapter(adapter);
好了,搞定运行。运行,结果为空。查看log,发现报错No layout manager attached; skipping layout
。
查看API发现是没有设置LayoutManager。于是设置。包括LinearLayoutManager,GridLayoutManager等。设置`
GridLayoutManager layoutManager = new GridLayoutManager(MainActivity.this, 2);
recyclerView.setLayoutManager(layoutManager);
运行效果如图
最后。我的第一次写博客不会上传代码。粘贴我的类出来。
“`
package com.example.myrecycleview;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Arrays;
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
MyAdapter adapter;
ArrayList list;
Button button;
Object[] ss;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.recycleView);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
list.add("点击添加第一项");
list.add("点击添加第二项");
list.add("点击添加第三项");
list.add("点击添加第四项");
list.add("点击添加第五项");
list.add("点击添加第六项");
//将list转化为数组
ss = list.toArray();
adapter.notifyDataSetChanged();
}
});
adapter = new MyAdapter();
//准备数据
prepare();
// 设置View的布局为线性布局
// LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this);
// 不设置,默认为竖屏
// layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
// 设置View的布局为九宫格式
// 第二个参数为设置九宫格为几列
GridLayoutManager layoutManager = new GridLayoutManager(MainActivity.this, 2);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapter);
}
private void prepare() {
ss = getResources().getStringArray(R.array.items);
L.i("数组是" + Arrays.toString(ss));
list = new ArrayList();
for (int i = 0; i < ss.length; i++) {
list.add((String) ss[i]);
}
L.i("list的数据是" + list.toString());
}
class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//返回布局
return new ViewHolder(LayoutInflater.from(MainActivity.this).inflate(R.layout.item, parent, false));
}
@Override
public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) {
//集合数据
// holder.textView.setText(list.get(position));
holder.textView.setText("" + ss[position]);
}
@Override
public int getItemCount() {
//集合的方式
// if (list == null)
// return 0;
// return list.size();
// 使用的是数据数据也可以,和list数据同样效果
if (ss == null)
return 0;
return ss.length;
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public ViewHolder(View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.text);
}
}
}
}
“`如果不正确之处还请赐教。