首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回收器视图和卡片视图中的问题

回收器视图和卡片视图中的问题
EN

Stack Overflow用户
提问于 2016-06-21 01:12:28
回答 1查看 441关注 0票数 0

我想显示卡片视图,但它不显示,它显示致命的异常,任何人可以解决这个错误与您的编程skills.please查看所有布局和类?

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {
 List<Person> persons;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    RecyclerView  rv = (RecyclerView)findViewById(R.id.recycle);
    rv.setHasFixedSize(true);
    initializeData();
    LinearLayoutManager ll = new LinearLayoutManager(this);
    rv.setLayoutManager(ll);
    RvAdapter rvAdapter = new RvAdapter(persons);
    rv.setAdapter(rvAdapter);

}

private void initializeData() {

    persons = new ArrayList<>();
    persons.add(new Person("Anilkumar","23 years",R.drawable.anil));
    persons.add(new Person("Prashanthi","21 years",R.drawable.inr));
}

}

Person类

代码语言:javascript
复制
public class Person
{
String name;
String age;
int photoId;

Person(String name,String age,int photoId)
{
    this.name = name;
    this.age = age;
    this.photoId = photoId;
}

}

RVadapter类

代码语言:javascript
复制
public class RvAdapter extends RecyclerView.Adapter<RvAdapter.PersonViewHolder>
{


private List<Person> persons;
RvAdapter(List<Person> persons)
{
    this.persons = persons;
}

@Override
public PersonViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardlayout,parent,false);
    PersonViewHolder pvh = new PersonViewHolder(v);
    return pvh;
}

@Override
public void onBindViewHolder(PersonViewHolder holder, int position) {
        holder.personName.setText(persons.get(position).name);
    holder.personName.setText(persons.get(position).age);
    holder.personPhoto.setImageResource(persons.get(position).photoId);
}

@Override
public int getItemCount() {

    return persons.size();
}

@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
}

public static class PersonViewHolder extends RecyclerView.ViewHolder
{
    CardView cardView;
    TextView personName;
    TextView personAge;
    ImageView personPhoto;
    public PersonViewHolder(View itemView) {
        super(itemView);
        cardView = (CardView)itemView.findViewById(R.id.card);
        personName = (TextView)itemView.findViewById(R.id.text);
        personAge = (TextView)itemView.findViewById(R.id.text2);
        personPhoto = (ImageView)itemView.findViewById(R.id.image);
    }
}
}

Logcat错误

代码语言:javascript
复制
06-20 22:51:57.126 5433-5433/com.example.anilkumar.recyclerview E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:483)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:351)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:773)
at android.content.res.Resources.loadDrawable(Resources.java:1940)
at android.content.res.Resources.getDrawable(Resources.java:664)
at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:368)
at android.support.v7.internal.widget.TintManager.getDrawable(TintManager.java:177)
at android.support.v7.internal.widget.TintManager.getDrawable(TintManager.java:170)
at android.support.v7.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:53)
at android.support.v7.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:74)
at com.example.anilkumar.recyclerview.RvAdapter.onBindViewHolder(RvAdapter.java:49)
at com.example.anilkumar.recyclerview.RvAdapter.onBindViewHolder(RvAdapter.java:16)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5746)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5779)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5016)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4892)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2029)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1414)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1377)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:578)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3239)
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:2767)
at android.view.View.measure(View.java:12723)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:594)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:376)
at android.view.View.measure(View.java:12723)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
at android.support.v7.internal.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
at android.view.View.measure(View.java:12723)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)

card layout recycle layout

EN

回答 1

Stack Overflow用户

发布于 2016-06-21 01:42:49

你有你提到的大图像,当你处理太大的图像时,你必须注意内存问题。您可以使用PicassoUniversal Image LoaderGlide

这些库将异步加载您的图像,并且您不会遇到任何内存问题。

到目前为止,我最大的图像大小之一是(4560x5250),我没有得到任何内存问题,但如果你想平滑滚动,你可以在Picasso中减小图像大小。

目前,我在我的RecyclerView.I中使用Picasso,可以给出Picasso的例子,比如:

在您的onBindViewHolder中:

代码语言:javascript
复制
@Override
public void onBindViewHolder(PersonViewHolder holder, int position) {
holder.personName.setText(persons.get(position).name);
holder.personAge.setText(persons.get(position).age);
Picasso.with(context).load(persons.get(position).photoId).into(holder.personPhoto);

}

你也可以找到关于这些库的比较:picasso-v-s-imageloader-v-s-fresco-vs-glide

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37928210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档