Android CursorAdapter列表视图未填充

Android CursorAdapter列表视图未填充,android,Android,我正在从基本适配器切换到游标适配器。所以我创建了我的CursorAdapter类 public class OrderListAdapterCursor extends CursorAdapter{ private GetInventoryColor getInvColor = new GetInventoryColor(); public OrderListAdapterCursor(Context context, Cursor c, String x) { super(cont

我正在从基本适配器切换到游标适配器。所以我创建了我的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没有绑定

有什么我错过的吗


谢谢大家

设置适配器后不应关闭光标。将光标设为活动的成员变量,并在活动的onDestroy()方法中将其关闭。

不应在setAdapter之后关闭光标。将光标设为活动的成员变量,并在活动的onDestroy()方法中将其关闭。

您的问题是因为您在将光标分配给适配器后立即关闭了光标

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

使用完光标后,请在后期使用
ondestory()
方法销毁光标

您的问题是因为您在将
光标分配给适配器后立即关闭了它

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

使用完光标后,请在后期使用
ondestory()
方法销毁光标

我看到你在分配光标后关闭了光标,可能有问题吗?@DevZer0可以,但是先生,我们必须关闭光标,对吗?你可以在稍后阶段销毁它。我看到你在分配光标后关闭了光标,可能有问题吗?@DevZer0可以,但是先生,我们必须右键关闭光标,你可以在稍后阶段销毁它。