您的位置:首页 > 其它

RecyclerView只能显示一行的问题

2016-10-24 17:36 302 查看
最近想把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之后
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐