gpt4 book ai didi

java - ListView 快速滚动时崩溃

转载 作者:行者123 更新时间:2023-12-02 03:58:44 25 4
gpt4 key购买 nike

我为 ListView 创建了自定义适配器。当我缓慢滚动时,它工作正常,但是,当我快速滚动时,应用程序崩溃了。我查看了一些有关此问题的解决方案,但我不明白。我认为我需要添加 getViewTypeCount 和 getItemViewType 但我无法正确添加这些。

所有代码都在这里; http://pastebin.com/BZB9G9p7

自定义适配器.java

package com.example.mete.cocuksarkilari;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomAdapter extends ArrayAdapter<String>{

private final int VIEW_TYPE_STRING = 0;
private final int VIEW_TYPE_IMAGE = 1;
private final Activity context;
private final String[] names;
private final Integer[] imageId;

public CustomAdapter(Activity context, String[] names, Integer[] imageId) {
super(context, R.layout.custom_row,names);
this.context = context;
this.names = names;
this.imageId = imageId;

}

@Override
public int getViewTypeCount() {
return 2;
}

@Override
public int getItemViewType(int position) {
return (position == 0) ? VIEW_TYPE_STRING :VIEW_TYPE_IMAGE;
}

@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView= inflater.inflate(R.layout.custom_row, null, true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.textView);

ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView);
txtTitle.setText(names[position]);

try{
imageView.setImageResource(imageId[position]);
}catch (Exception e){

}

return rowView;
}
}

日志

02-01 17:22:51.001  14221-14221/com.example.mete.cocuksarkilari E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.mete.cocuksarkilari, PID: 14221
java.lang.OutOfMemoryError: Failed to allocate a 8087052 byte allocation with 2036816 free bytes and 1989KB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:988)
at android.content.res.Resources.loadDrawableForCookie(Resources.java:2474)
at android.content.res.Resources.loadDrawable(Resources.java:2381)
at android.content.res.Resources.getDrawable(Resources.java:787)
at android.content.Context.getDrawable(Context.java:403)
at android.support.v4.content.ContextCompatApi21.getDrawable(ContextCompatApi21.java:26)
at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:321)
at android.support.v7.widget.TintManager.getDrawable(TintManager.java:175)
at android.support.v7.widget.TintManager.getDrawable(TintManager.java:168)
at android.support.v7.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:51)
at android.support.v7.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:72)
at com.example.mete.cocuksarkilari.CustomAdapter.getView(CustomAdapter.java:47)
at android.widget.AbsListView.obtainView(AbsListView.java:2347)
at android.widget.ListView.makeAndAddView(ListView.java:1864)
at android.widget.ListView.fillDown(ListView.java:698)
at android.widget.ListView.fillGap(ListView.java:662)
at android.widget.AbsListView.trackMotionScroll(AbsListView.java:4991)
at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3418)
at android.widget.AbsListView.onTouchMove(AbsListView.java:3801)
at android.widget.AbsListView.onTouchEvent(AbsListView.java:3632)
at android.view.View.dispatchTouchEvent(View.java:8471)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2399)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2092)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2369)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1719)
at android.app.Activity.dispatchTouchEvent(Activity.java:2742)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2330)
at android.view.View.dispatchPointerEvent(View.java:8666)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4123)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3989)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3597)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3563)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3680)
at android.view.ViewRootImpl$InputSta

抱歉,我在pastebin中给出了代码,因为它太长了,我在Customadapter中尝试了这个代码,但它不起作用

private final int VIEW_TYPE_STRING = 0;
private final int VIEW_TYPE_IMAGE = 1;


@Override
public int getViewTypeCount() {
return 2;
}

@Override
public int getItemViewType(int position) {
return (position == 0) ? VIEW_TYPE_STRING :VIEW_TYPE_IMAGE;
}

最佳答案

使用

public View getView(int position, View convertView, ViewGroup parent)

并利用 convertView 来节省内存使用量。

这是一篇好文章performance-tips-for-androids-listview .

关于java - ListView 快速滚动时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35141363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com