0

我将开发一个应用程序,我正在使用自定义警报对话框。数据已从数据库到此警报对话框。

 menu_to_showdialogCursor = dh.rawQuery("SELECT _id ,item_name,Item_cost FROM order_customer WHERE item_name LIKE ? AND Item_cost LIKE ?", new String[]{"%","%"});
 OrderListAdapter orderAdapter = new OrderListAdapter(MainScreen.this,menu_to_showdialogCursor );
 orderList.setAdapter(orderAdapter);

上面一行正在调用我的适配器类。现在我要在适配器类中显示我的 getView()

        public View getView(int position, View convertView, ViewGroup parent) {
    OrderViewHolder orderViewHolder = null;
    if (convertView == null) {
        orderViewHolder = new OrderViewHolder();

            convertView = inflater.inflate(R.layout.order_list_row, null);
            orderViewHolder.setTvTitle((TextView) convertView
                    .findViewById(R.id.orderTitle));
            orderViewHolder.setTvPrice((TextView) convertView
                    .findViewById(R.id.orderPrice));
            orderViewHolder.setIvDelete((ImageButton) convertView
                    .findViewById(R.id.deleteOrder));


        convertView.setTag(orderViewHolder);

    } else {
        orderViewHolder = (OrderViewHolder) convertView.getTag();
    }

    if (position != 0)

    {
  System.out.println(" value of position  :"+position);  
  List lit = new ArrayList();
  List litp = new ArrayList();

 // System.out.println(" value of postion of cursor  : ");
  OrderViewHolder odr_obj = null;
        if (oStarterCursor.moveToFirst()) {     
            do{    
                odr_obj = new OrderViewHolder();
             title = oStarterCursor.getString(oStarterCursor.getColumnIndex("item_name"));
            System.out.println("value of title   :"+title);

            lit.add(title);
             price = oStarterCursor.getString(oStarterCursor.getColumnIndex("Item_cost"));  
            System.out.println("value of price   :"+price);
            litp.add(price);
            }while(oStarterCursor.moveToNext());
        }
        //  _id = oStarterCursor.getInt(oStarterCursor.getColumnIndex("_id"));
            if (title != null) {
                title = title.trim();  
                Iterator it = lit.iterator();    
                while (it.hasNext()) {
                    int i =0;
                    //System.out.println(" data iterator "+it.next().toString());
                    String test =it.next().toString();
                    System.out.println(" iterator vavue :"+test);
                    orderViewHolder.getTvTitle().setText(test);   

                }

                orderViewHolder.getTvTitle().setTextColor(R.color.black);
                orderViewHolder.getTvTitle().setTextSize(12);
                orderViewHolder.getTvTitle().setTypeface(Typeface.DEFAULT);
                orderViewHolder.getTvTitle().setGravity(   
                        Gravity.CENTER_VERTICAL);    
            }   
            if (price != null) {
                price = price.trim();
                orderViewHolder.getTvPrice().setText(price + ".00");
                orderViewHolder.getTvTitle().setTextColor(R.color.black);
                orderViewHolder.getTvTitle().setTextSize(12);
                orderViewHolder.getTvTitle().setTypeface(Typeface.DEFAULT);
                orderViewHolder.getTvTitle().setGravity(
                        Gravity.CENTER_VERTICAL);
            }
            //_id = oStarterCursor.getInt(oStarterCursor.getColumnIndex("_id"));




        //convertView.setTag(R.id.orderTitle, _id);
        if (orderViewHolder.getIvDelete() != null) {
            //orderViewHolder.getIvDelete().setTag(R.id.orderTitle, _id);
        }

    }
    return convertView;}

问题是在我的数据库中有两行,如下图所示。在此处输入图像描述

但在我的警报对话框中只显示一行两次。我没有得到逻辑错误在哪里。为方便起见,我将显示我的屏幕截图在此处输入图像描述

那么我无法解决的问题在哪里,请一些人帮我解决这个问题。

4

2 回答 2

0

我相信这是因为您使用 getView 错误,getView 不仅会在多次调用后被调用。每次调用 getView 时,您都在遍历光标,因此您仅在遍历 2 个列表后才显示光标中的最后一项。

如果您从应该使用的游标获取数据SimpleCursorAdapter,然后bindView在每次调用时覆盖并仅在方法中使用游标变量

编辑

基本上按照这个思路

oStarterCursor.moveToPosition(position);
orderViewHolder.getTvTitle().setText(oStarterCursor.getString(oStarterCursor.getColumnIndex("item_name")));

真正获取数据所需的一切

于 2013-10-21T13:57:01.330 回答
0

我认为这是你的路线:

if (position != 0)

适配器的第一行为 0,因此它不会为第一行数据设置数据。

于 2013-10-21T15:07:20.150 回答