2013-06-29 25 views
0

我正在从基础适配器切换到cursorAdapter。所以,我建立了我的CursorAdapter类Android CursorAdapter ListView未填充

public class OrderListAdapterCursor extends CursorAdapter{ 
private GetInventoryColor getInvColor = new GetInventoryColor(); 

public OrderListAdapterCursor(Context context, Cursor c, String x) { 
    super(context, c); 
    // TODO Auto-generated constructor stub 
} 


@Override 
public void bindView(View vi, final Context context, Cursor cursor) { 
    // TODO Auto-generated method stub 
    final ViewHolder holder = new ViewHolder(); 
    holder.thumb_image =(ImageView)vi.findViewById(R.id.ivOrderPicture); // thumb image 
    holder.tvmainOrder= (TextView)vi.findViewById(R.id.tvMainOrder); // titleOrder 
    holder.tvPrice = (TextView)vi.findViewById(R.id.tvOrderPrice); // price 
    holder.tvItemID = (TextView)vi.findViewById(R.id.tvItemID); // itemID 
    holder.tvItemCode = (TextView)vi.findViewById(R.id.tvItemCode); // item Code 

    holder.myLinearLayout = (LinearLayout) vi.findViewById(R.id.myLinearLayout); 
    holder.mylinearForRed = (LinearLayout)vi.findViewById(R.id.mylinearForRed); 
    holder.btnQuantity = (TextView)vi.findViewById(R.id.tvQuantity); 

    holder.tvmainOrder.setText(cursor.getString(cursor.getColumnIndex(cursor.getColumnName(0)))); 
     //tvmainOrder.setTypeface(modGen.typeFaceArial); 
    holder.tvItemID.setText(cursor.getString(cursor.getColumnIndex(cursor.getColumnName(2)))); 
     //tvItemID.setTypeface(modGen.typeFaceArial); 
    holder.tvItemCode.setText(cursor.getString(cursor.getColumnIndex(cursor.getColumnName(1)))); 
     //tvItemCode.setTypeface(modGen.typeFaceArial); 
    holder.tvPrice.setText(cursor.getString(cursor.getColumnIndex(cursor.getColumnName(3)))); 
    holder.btnQuantity.setText(cursor.getString(cursor.getColumnIndex(cursor.getColumnName(4)))); 

     //btnQuantity.setTag(position); 
     //btnInfo.setTag(position); 

    holder.thumb_image.setTag(cursor.getString(cursor.getColumnIndex(cursor.getColumnName(2)))); 
    holder.thumb_image.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       Object as = holder.thumb_image.getTag(); 
       final Integer myPosition = Integer.valueOf(as.toString()); 
       Toast.makeText(context, ""+myPosition, Toast.LENGTH_LONG).show(); 
       //String myItemID = data.get(myPosition).orderitemID; 
       //((TransactionPage) mainContext).ShowProductCatalogItem(myItemID, "0"); 
      } 
     }); 

     // String background = data.get(position).orderColor; 
     String background = getInvColor.getItemIDColor(cursor.getString(cursor.getColumnIndex(cursor.getColumnName(2))), context); 

     if (background.equalsIgnoreCase("RED")){ 
      holder.myLinearLayout.setBackgroundColor(Color.RED); 
     } 
     else if (background.equalsIgnoreCase("YELLOW")){ 
      holder.myLinearLayout.setBackgroundColor(Color.YELLOW); 
     } 
     else 
     { 
      holder.myLinearLayout.setBackgroundColor(Color.GREEN); 
     } 


     //tvStocksQty.setText(data.get(position).stocksQty); 
     LinearLayout mylinearForRed = (LinearLayout)vi.findViewById(R.id.mylinearForRed); 
     String qty1 = cursor.getString(cursor.getColumnIndex(cursor.getColumnName(4))); 

      if (qty1 == null ||qty1.equalsIgnoreCase("")){ 
       mylinearForRed.setVisibility(View.INVISIBLE); 
       //int resmyID =R.drawable.ribbutton_counter; 
       //mylinearForRed.setBackgroundResource(resmyID); 
      }else{ 
       mylinearForRed.setVisibility(View.VISIBLE); 
       //int resmyID =R.drawable.ribbutton_counter; 
       //mylinearForRed.setBackgroundResource(resmyID); 
      } 

} 

@Override 
public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
    View retView = inflater.inflate(R.layout.order_list_style, parent, false); 
    return retView; 
} 

    static class ViewHolder 
    { 
     public ImageView thumb_image; 
     public TextView tvmainOrder; 
     public TextView tvPrice; 
     public TextView tvItemID; 
     public TextView tvItemCode; 
     public TextView btnQuantity; 
     public LinearLayout myLinearLayout; 
     public LinearLayout mylinearForRed; 
    } 

    } 

当我是新来这个光标适配器使用此代码和查询

selectQuery = "SELECT item_tb.dDesc, item_tb.itemcode, item_tb.ID as _id, price_tb.dPrice, transaction_tb.qtyOrdered FROM item_tb " + 
       "INNER JOIN price_tb ON item_tb.ID = price_tb.itemID " + 
       "INNER JOIN category_tb ON category_tb.ID = item_tb.categoryID " + 
       "LEFT JOIN transaction_tb ON item_tb.ID = transaction_tb.itemID " + 
       "WHERE category_tb.dDesc LIKE '"+ category +"%' " + 
       "AND (item_tb.dDesc LIKE '%" + sort +"%' OR " + 
       "item_tb.itemCode LIKE '" + sort + "%') " + 
       "AND item_tb.isPublish = '1'" + 
       "ORDER BY item_tb.dDesc ASC"; 

    mySQLiteAdapter = new SQLiteAdapter(context); 
    mySQLiteAdapter.openToRead(); 

    final Cursor cursor =mySQLiteAdapter.read(selectQuery); 

    //new Handler().post(new Runnable() { 
    // public void run() { 

      orderlistcursor= new OrderListAdapterCursor(context, cursor, sort); 
      listViewSearchPanel.setAdapter(orderlistcursor); 
      cursor.close(); 
      mySQLiteAdapter.close(); 

对不起结合它。我很确定游标有数据,因为使用基本适配器包含900多个数据。我的问题是为什么,这个listview没有绑定。

有什么我错过?

谢谢你们

+1

我看到你关闭光标后,分配它可能有一些问题? – DevZer0

+0

w8先生让我检查 – Androyds

+0

@ DevZer0的工作,但先生,我们必须关闭游标权? – Androyds

回答

2

你的问题,是因为你关闭cursor将其分配给适配器之后,

orderlistcursor= new OrderListAdapterCursor(context, cursor, sort); 
listViewSearchPanel.setAdapter(orderlistcursor); 
cursor.close(); 
mySQLiteAdapter.close(); 

破坏光标在后一阶段onces你使用它,在一个onDestroy()方法来完成。

+0

是这样的问题 – Androyds

4

你不应该在setAdapter之后关闭游标。使光标成为Activity的成员变量,并在Activity的onDestroy()方法中关闭它。