简体   繁体   中英

I have populated my custom list view from sqlite database. List view custom row contains one imageview ,textview and button.

I want to perform delete operation on that row when the that row's button is pressed. The delete query works fine when i pass id by our own. i am getting problem while getting id of the row inside the onclick method please help

here is my code

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;
    }
}

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

Make following changes to your code and adapter modal class:

  1. Add id field in your Item.java modal class if already done then ignore.
  2. Set this id field while fetching data from your Sqlite DB. This should your primary key.
  3. Move Item picture = data.get(position); code above if(row == null) .
  4. Add this code holder.b.setTag(picture); after initializing holder.b
  5. Change your button click listener as below

     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();}); 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM