如果我们快速滚动Listview
,则应用会抛出致命异常OutofMemoryError
。
滚动时总是会出现相同的错误。如何处理?
public class UpcomingAdapter extends BaseAdapter{
Typeface typeFace;
private ArrayList<String> mEventName,mDate,mTime;
private LayoutInflater mInflater;
public UpcomingAdapter(LayoutInflater mInflater,
ArrayList<String> mDEventName,
ArrayList<String> mDdate,
ArrayList<String> mDtime,
Typeface typeface)
{
this.mEventName=mDEventName;
this.mDate=mDdate;
this.mTime=mDtime;
this.mInflater=mInflater;
this.typeFace=typeface;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int arg0, View view, ViewGroup parent) {
ViewHolder holder = null;
if(view==null) {
holder=new ViewHolder();
view=mInflater.inflate(R.layout.upcomingevent_list,null);
view.setTag(holder);
holder=(ViewHolder) view.getTag();
holder.holderDate=(TextView)view.findViewById(R.id.xTvUpcomingEvents_DateList);
holder.holderEventName=(TextView)view.findViewById(R.id.xTvUpcomingEvents_Events);
holder.holderEventName.setTypeface(typeFace);
holder.holderDate.setTypeface(typeFace);
} else {
holder=(ViewHolder) view.getTag();
}
//holder.employeeName.setTag(mEmpIds.get(arg0));
setText(mEventName.get(arg0), holder.holderEventName);
setText(mDate.get(arg0), holder.holderDate);
setText(mTime.get(arg0), holder.holderEventName);
holder.holderEventName.setTag(mEventName.get(arg0));
holder.holderEventName.setTypeface(typeFace);
//holder.holderArtistId.setTypeface(typeFace);
return view;
}
public static class ViewHolder{
TextView holderEventName;
TextView holderDate;
//TextView holderArtistId;
}
private void setText(String data,TextView view){
if(data.equals(StaticUtils.sNullString)){
view.setText(StaticUtils.sEmptyString);
} else {
view.setText(data);
}
}
}
这是错误:
08-17 15:08:22.950: E/AndroidRuntime(25423): FATAL EXCEPTION: main
08-17 15:08:22.950: E/AndroidRuntime(25423): java.lang.OutOfMemoryError: [memory exhausted]
08-17 15:08:22.950: E/AndroidRuntime(25423): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:1)
在你的getView方法中试试:
@Override
public View getView(int arg0, View view, ViewGroup parent) {
if(view==null) {
LayoutInflater layoutInflater=LayoutInflater.from(getContext());
view=layoutInflater.inflate(R.layout.upcomingevent_list, parent, false);
holder=new ViewHolder();
holder.holderDate=(TextView)view.findViewById(R.id.xTvUpcomingEvents_DateList);
holder.holderEventName=(TextView)view.findViewById(R.id.xTvUpcomingEvents_Events);
holder.holderEventName.setTypeface(typeFace);
holder.holderDate.setTypeface(typeFace);
view.setTag(holder);
} else {
holder=(ViewHolder) view.getTag();
}
//holder.employeeName.setTag(mEmpIds.get(arg0));
setText(mEventName.get(arg0), holder.holderEventName);
setText(mDate.get(arg0), holder.holderDate);
setText(mTime.get(arg0), holder.holderEventName);
holder.holderEventName.setTag(mEventName.get(arg0));
holder.holderEventName.setTypeface(typeFace);
//holder.holderArtistId.setTypeface(typeFace);
return view;
}
答案 1 :(得分:0)
你也可以覆盖 onLowMemory()方法的活动,并在活动检测到内存不足时运行垃圾收集器。 您可以使用System.gc()。同时使此方法中的不需要的变量无效。
答案 2 :(得分:-2)
将以下方法替换为现有代码。
@Override
public int getItem(int position) {
return <Return Particular int variable from Data>;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return <Return Particular int variable from Data>;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return <Return Particular int variable from Data>;
}