2013-10-21 89 views
1

我遇到了導致我的應用崩潰的ListView問題。整個應用程序不會崩潰,它只是關閉視圖並重新加載主要活動。它表面上看起來很好,當滾動速度非常快時,它大部分是穩定的。但是,如果我使用快速滾動進行多次上下滾動,則屏幕將凍結並重新加載主要活動。有人可以幫我找出問題所在嗎?這是我從logcat的接收時崩潰的錯誤:滾動速度非常快時ListView崩潰致命錯誤

Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1), thread 12439 (AsyncTask #4) 

下面就來看看我的代碼:

的getView()方法

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = new ViewHolder(); 
     View vi = convertView; 
     if (convertView == null) { 
      vi = inflater.inflate(R.layout.custom_layout, null); 
      vi.setMinimumHeight(120); 

      holder = new ViewHolder(); 
      holder.text = (TextView) vi.findViewById(R.id.text); 
      holder.icon= (ImageView) vi.findViewById(R.id.icon); 

      vi.setTag(holder); 
     } 

     holder = (ViewHolder) vi.getTag(); 
     holder.position = kanji_ids.get(position); 
     holder.context = vi.getContext(); 
     new DownloadAsyncTask().execute(holder); 
     return vi; 
    } 

這裏是提取的的的AsyncTask數據並顯示它...

class DownloadAsyncTask extends AsyncTask<ViewHolder, Void, ViewHolder> { 
    String icon; 
    String text; 

    @Override 
    protected ViewHolder doInBackground(ViewHolder... params) { 
     ViewHolder viewHolder = params[0]; 
     Context context = viewHolder.context; 
     Database db = Database.getInstance(context); 
     text = db.getPercentByPosition(viewHolder.position); 
     icon = db.getIconByPosition(viewHolder.position); 

     return viewHolder; 
    } 

    @Override 
    protected void onPostExecute(ViewHolder result) { 
     if (result.icon == null) { 
      result.icon.setImageResource(R.drawable.loading); 
     } else { 
      result.icon.setImageResource(icon); 
     } 

     result.text.setText(text); 

    } 
} 

回答

0

這可能是因爲圖標不再可見,當您滾動時,該視圖被重新用於新行。您應該使用WeakReferences並檢查viewHolder或圖標是否爲空,如果它們是您可以放棄更改。文本也一樣。

+0

感謝您的回覆!我對如何實現這一點感到困惑。我是否讓持有人的圖片視圖和文字視圖的參考資料較弱?我是否會讓觀點本身成爲一個弱引用? – dharris001