我想显示卡片视图,但它不显示,它显示致命的异常,任何人可以解决这个错误与您的编程skills.please查看所有布局和类?
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类
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类
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错误
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
发布于 2016-06-21 01:42:49
你有你提到的大图像,当你处理太大的图像时,你必须注意内存问题。您可以使用Picasso、Universal Image Loader或Glide
这些库将异步加载您的图像,并且您不会遇到任何内存问题。
到目前为止,我最大的图像大小之一是(4560x5250),我没有得到任何内存问题,但如果你想平滑滚动,你可以在Picasso中减小图像大小。
目前,我在我的RecyclerView.I中使用Picasso,可以给出Picasso的例子,比如:
在您的onBindViewHolder中:
@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
https://stackoverflow.com/questions/37928210
复制相似问题