Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android addTextChangedListener在基本适配器内不工作_Android_Sqlite - Fatal编程技术网

Android addTextChangedListener在基本适配器内不工作

Android addTextChangedListener在基本适配器内不工作,android,sqlite,Android,Sqlite,我已经实现了一个定制的listview,包括名称、价格、数量等 默认情况下,所有列表项中的数量为1 如果用户将列表项的数量从1更改为2,则必须在Sqlite数据库中更新更改的数量 问题 我尝试使用addTextChangedListener从用户输入中获取更新的数据,并在sqlite数据库中进行更新。但是addTextChangedListener不工作 我无法更新数据库中的必填字段 下面是我使用的代码addTextChangedListener @Override public View ge

我已经实现了一个定制的listview,包括名称、价格、数量等

默认情况下,所有列表项中的数量为1

如果用户将列表项的数量从1更改为2,则必须在Sqlite数据库中更新更改的数量

问题

我尝试使用
addTextChangedListener
从用户输入中获取更新的数据,并在sqlite数据库中进行更新。但是
addTextChangedListener
不工作

我无法更新数据库中的必填字段

下面是我使用的代码
addTextChangedListener

@Override
public View getView(final int position, View convertView, final ViewGroup parent) {

    View rowView = convertView;

    if (convertView == null) {

        // TODO Auto-generated method stub
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);


        rowView = inflater.inflate(R.layout.list_items_cart, null);


        holder.tv_name = (TextView) rowView.findViewById(R.id.name_cart);
        holder.tv_price = (TextView) rowView.findViewById(R.id.price_cart);
        holder.image = (ImageView) rowView.findViewById(R.id.image_cart);
        holder.tv_model = (TextView) rowView.findViewById(R.id.model_cart);
        holder.tv_product = (TextView) rowView.findViewById(R.id.product_cart);
        holder.delete = (Button) rowView.findViewById(R.id.delete);
        holder.quantity = (EditText) rowView.findViewById(R.id.quantity);
        rowView.setTag(holder);



    }
    else

    holder = (Holder) rowView.getTag();

    holder.tv_name.setText(list_name.get(position));
    name = holder.tv_name.getText().toString();
    holder.tv_price.setText(list_price.get(position));
    price = holder.tv_price.getText().toString();
    holder.tv_model.setText(list_model.get(position));
    model = holder.tv_model.getText().toString();
    holder.tv_product.setText(list_productid.get(position));
    product = holder.tv_product.getText().toString();
    holder.quantity.setText(quant_items.get(position));
    quant = holder.quantity.getText().toString();





    holder.image.setImageBitmap(loadImageFromStorage(list_images.get(position)));
    image_new = holder.image.toString();


    holder.quantity.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {

            value = s.toString().trim();
            quant.replace(holder.quantity.getText().toString(), value);
            updateTable();

        }

    });


    final Holder finalHolder = holder;
    holder.delete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DatabaseHandler db = new DatabaseHandler(context);
            //SQLiteDatabase db1 = db.getWritableDatabase();

            // db.onUpgrade(db1,0,1);


            deleteUser(finalHolder.tv_model.getText().toString());
            ListView list = (ListView)parent;
            cart_refresh.notifyDataSetChanged();
          list.setAdapter(cart_refresh);


            //  db.deleteContact(new Cart(holder.tv_name.getText().toString(),holder.tv_price.getText().toString()
            //     ,holder.image.toString(),holder.tv_model.getText().toString()));
        }
    });


    final View finalRowView = rowView;
    rowView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String name_item = ((TextView) finalRowView.findViewById(R.id.name_cart)).getText().toString();
            String price_item = ((TextView) finalRowView.findViewById(R.id.price_cart)).getText().toString();
            model_item = ((TextView) finalRowView.findViewById(R.id.model_cart)).getText().toString();

            Intent in = new Intent(context, AddCart_FullImage.class);
            in.putExtra("model", model_item);
            in.putExtra("name", name_item);
            in.putExtra("price", price_item);
            context.startActivity(in);
        }
    });
    return rowView;
}




private Bitmap loadImageFromStorage(String path) {

    try {
        File f = new File(path, "");
        f.canRead();
        b = BitmapFactory.decodeStream(new FileInputStream(f));
        return b;


    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    return null;
}
public void deleteUser(String userName)
{
    final DatabaseHandler db = new DatabaseHandler(context);

    SQLiteDatabase db1 = db.getWritableDatabase();
    try
    {
        db1.delete("cart", "model = ?", new String[]{userName});


        //cart_refresh.notifyDataSetChanged();


    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    finally
    {
        db.close();
    }



}
public void updateTable() {
    final DatabaseHandler db = new DatabaseHandler(context);

    SQLiteDatabase db1 = db.getWritableDatabase();
    try {
        db.updateContact(new Cart(name, price,image_new,model, product,value));

    } catch (Exception e) {

    }



}
任何帮助都是值得的


谢谢。

您最大的问题是,您使用的是字段而不是局部变量

quant = holder.quantity.getText().toString();
每次调用
getView()
so时更新
quant

@Override
public void afterTextChanged(Editable s) {
    value = s.toString().trim();
    quant.replace(holder.quantity.getText().toString(), value);
    updateTable();
}
将使用上次绑定到数据的文本字段,而不是添加侦听器的文本字段

您需要注意正在使用的变量的范围,并为您的模型引入一致性

我建议在不使用任何字段的情况下完全重写适配器