2012-08-17 57 views
1

如果我们快速滚动Listview,应用程序会抛出致命异常OutofMemoryError滚动ListView时抛出OutofMemoryException

它滚动时总是给出相同的错误。如何处理它?

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

你的例外没有了吗? – 2012-09-26 11:13:49

回答

-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>; 
} 
+0

你的回答是绝对错误的,因为你说从你的角度来看所有东西都返回相同的'int变量'。 – 2012-08-17 04:44:27

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; 
    } 
0

您还可以覆盖活动 onLowMemory()方法,而当活动检测低内存运行垃圾收集器。 您可以使用System.gc()。也可以在此方法中取消不需要的变量。