0

我正在从基本适配器切换到 cursorAdapter。所以我创建了我的 CursorAdapter 类

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 没有绑定。

有什么我想念的吗?

多谢你们

4

2 回答 2

4

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

于 2013-06-29T07:51:09.540 回答
2

cursor您的问题是因为您在将其分配给适配器后关闭了权利,

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

一旦你完成使用它,在一个onDestroy()方法中销毁光标。

于 2013-06-29T07:58:57.723 回答