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:
Item picture = data.get(position);
code above if(row == null)
. holder.b.setTag(picture);
after initializing holder.b 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.