2013-09-03 4 views
0

У меня есть gridview, как listview. Она работает правильно первый запуск, но при нажатии назад и вернуть деятельность, которая есть GridView, получить некоторые ошибки ...gridview не работал во второй раз

LogCat: android.database.CursorWindowAllocationException: Курсор выделения окна 2048 кб не удалось. # Open Cursors = 761 (# курсоры, открытые этим proc = 761)

Я смотрю на такой вопрос, решение всегда связано с курсором. Я закрываю курсор, когда информацию заселить элементы .. но это не работало ...

мой код GridView:

private void refreshList(String sql) 
{ 
    gridArray = new ArrayList<Stock>(); 
    final Cursor cursor = _SQLite.RawQueryTry(sql, null); 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inSampleSize = 2; 
    if (cursor != null) 
    { 
     if (cursor.moveToFirst()) 
     { 
      for (int i = 0; i < cursor.getCount(); i++) 
      { 
       String stockName = cursor.getString(cursor.getColumnIndex("STOK_ADI")); 
       String stockNo = cursor.getString(cursor.getColumnIndex("STOK_NO")); 
       String stockCode = cursor.getString(cursor.getColumnIndex("STOK_KODU")); 
       String stockEntity = cursor.getString(cursor.getColumnIndex("BIRIM")); 
       String stockKdvOranı = cursor.getString(cursor.getColumnIndex("KDV_ORANI")); 
       String stockRatio = TableUtils.getFieldValue("KATSAYI", "BIRIM", stockEntity, "STOKBIRI"); 
       String stockAmount = cursor.getString(cursor.getColumnIndex("MIKTAR")); 
       gridArray.add(new Stock(stockName, stockNo, stockCode, stockKdvOranı, stockEntity, stockAmount, stockRatio, processNo)); 

       cursor.moveToNext(); 
      } 
     } 
    } 
    cursor.close(); 
    gridAdapter = new AdapterStockGridListView(this, R.layout.stockgridlistitems, gridArray); 
    gridView.setAdapter(gridAdapter); 

} 

мой класс адаптер здесь:

public class AdapterStockGridListView extends ArrayAdapter<Stock> 
{ 
    Context context; 
    int id; 
    ArrayList<Stock> stock = new ArrayList<Stock>(); 

    public AdapterStockGridListView(Context context, int id, ArrayList<Stock> stock) 
    { 
     super(context, id, stock); 
     this.id = id; 
     this.context = context; 
     this.stock = stock; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     View row = convertView; 
     RecordHolder holder = null; 

     if (row == null) 
     { 
      LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
      row = inflater.inflate(id, parent, false); 

      holder = new RecordHolder(); 
      holder.txtTitle = (TextView) row.findViewById(R.id.stockName); 
      holder.txtStockNo = (TextView) row.findViewById(R.id.stockNo); 
      holder.txtStockCode = (TextView) row.findViewById(R.id.stockCode); 
      row.setTag(holder); 
     } 
     else 
     { 
      holder = (RecordHolder) row.getTag(); 
     } 

     Stock item = stock.get(position); 
     holder.txtTitle.setText(item.getStockName()); 
     holder.txtStockNo.setText(item.getStockNo()); 
     holder.txtStockCode.setText(item.getStockCode()); 

     return row; 

    } 

} 

static class RecordHolder 
{ 
    TextView txtTitle; 
    TextView txtStockNo; 
    TextView txtStockCode; 

} 

ответ

0

переопределить этот метод в адаптере класс, а также печать размер массива может быть у него есть только один юдоль

@Override 
public int getCount() { 
    return stock.size(); 
} 
1

Это связано с тем, что вы пытаетесь получить доступ к закрытому курсору. Так удалите эту строку

cursor.close(); 

И управлять курсором правильно написать эту строку в вашей деятельности или фрагмента

В деятельности

startManagingCursor(pass Your Cursor object here); 

В Фрагмент

getActivity().startManagingCursor(pass Your Cursor object here); 
Смежные вопросы