最近想把listView换成RecyclerView,但是遇到了只能显示一行的问题,如图:
代码如下:
package com.app.eaju.recyleviewdemo;
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity {
RecyclerView mr;
List list;
Myadapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
initView();
}
private void initData() {
list = new ArrayList<String>();
for (int i = 0; i < 30; i++) {
list.add("" + i);
}
}
private void initView() {
mr = (RecyclerView) findViewById(R.id.rv);
//设置布局管理器
mr.setLayoutManager(new LinearLayoutManager(this));
//设置adapter
mr.setAdapter(new Myadapter());
//设置item增加移除动画
mr.setItemAnimator(new DefaultItemAnimator());
//添加分割线
mr.addItemDecoration(new DividerItemDecoration(
this, DividerItemDecoration.HORIZONTAL_LIST));
}
class Myadapter extends RecyclerView.Adapter<Myadapter.MyViewHolder> {
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
MainActivity.this).inflate(R.layout.item_recycle, parent,
false));
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.tv.setText(list.get(position));
}
@Override
public int getItemCount() {
return (list == null) ? 0 : list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView tv;
public MyViewHolder(View view) {
super(view);
tv = (TextView) view.findViewById(R.id.tv_item_recycle);
}
}
}
}
经过查找原因,是因为 MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
MainActivity.this).inflate(R.layout.item_recycle, parent,
false));
中parent限制了反射后布局的显示,改为以下即可:
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(MainActivity.this).inflate(R.layout.item_recycle, null));
原因分析:
其实,在显示一行的时候其余的行也被显示了,只不过因为每行都是match_parent得到了,也就是占了满屏,所以我们看到的只有一行,你想上啦动,就会看到其他行了.
此种显示一行的状态状态在listView中也有出现过,不过是确实是只一行,当时是因为holder=(ViewHolder)converView.getag();后的大括号写在了return convertView之后