【问题标题】:I have populated my custom list view from sqlite database. List view custom row contains one imageview ,textview and button.我已经从 sqlite 数据库填充了我的自定义列表视图。列表视图自定义行包含一个图像视图、文本视图和按钮。
【发布时间】:2017-08-11 03:11:40
【问题描述】:

当按下该行的按钮时,我想对该行执行删除操作。当我自己传递 id 时,删除查询工作正常。我在获取 onclick 方法中的行 ID 时遇到问题,请帮助

这是我的代码

package com.example.vasu.virtualfridge;

import java.io.ByteArrayInputStream;
import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class ContactImageAdapter extends ArrayAdapter<Item>{
    Context context;
    int layoutResourceId;
    // BcardImage data[] = null;
    ArrayList<Item> data=new ArrayList<Item>();
    public ContactImageAdapter(Context context, int layoutResourceId, ArrayList<Item> data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(final int position, final View convertView, ViewGroup parent) {
        View row = convertView;
        ImageHolder holder = null;

        if(row == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);

            holder = new ImageHolder();
            holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
            holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
            holder.b = (Button)row.findViewById(R.id.button2);
            row.setTag(holder);
        }
        else
        {
            holder = (ImageHolder)row.getTag();
        }

        Item picture = data.get(position);
        holder.txtTitle.setText(picture._name);
        //convert byte to bitmap take from contact class

        byte[] outImage=picture._Image;
        ByteArrayInputStream imageStream = new ByteArrayInputStream(outImage);
        Bitmap theImage = BitmapFactory.decodeStream(imageStream);
        holder.imgIcon.setImageBitmap(theImage);
        holder.b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int id = getPosition(getItem(position));
               //Object toRemove = data.get(id);
                DatabaseHandler db = new DatabaseHandler(context);
                db.deleteContact(1);
                data.remove(position);
                notifyDataSetChanged();


                Toast.makeText(context,"Removed",Toast.LENGTH_LONG).show();
            }
        });
        return row;

    }

    static class ImageHolder
    {
        ImageView imgIcon;
        TextView txtTitle;
        Button b;
    }
}

【问题讨论】:

  • 进一步解释您的问题。你有什么错误吗?解决问题的确切方法或确切方法
  • 请尝试在问题标题中描述您的关键问题,然后在描述中进一步描述。
  • 在您的 ArrayList 中添加 db 表中的行的 id,当您填充它时。您不显示此 ID,而是显示其在数组中的对象(项目)的一部分,例如 (db.deleteContact(data.get(dbrowid));)

标签: java android sqlite listview android-studio


【解决方案1】:

对您的代码和适配器模式类进行以下更改:

  1. 如果已经完成,则在 Item.java 模态类中添加 id 字段,然后忽略。
  2. 从 Sqlite DB 获取数据时设置此 id 字段。这应该是您的主键。
  3. Item picture = data.get(position);代码移到if(row == null)上方。
  4. 在初始化 holder.b 后添加此代码holder.b.setTag(picture);
  5. 如下改变你的按钮点击监听器

    holder.b.setOnClickListener(new View.OnClickListen(){@Override public void onClick(View view) {
    
    Item item = (Item)view.getTag();
    DatabaseHandler db = new DatabaseHandler(context);
    db.deleteContact(item.getId());//item.getId() refers to your row id that you have fetched from Sqlite
    data.remove(position);
    notifyDataSetChanged();
    
    
    Toast.makeText(context,"Removed",Toast.LENGTH_LONG).show();});
    

【讨论】:

    【解决方案2】:

    可能您似乎想要获取点击的行 id。为此,有一个 getItemAt(position) 函数。在 parent 上调用它。希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多