我如何引入一个OnItemClick方法来显示图片从sql数据库(gridview)在全屏活动(Android Stud



我有一个代码,女巫显示所有的图片从一个gridview的sql数据库,现在我尝试引入一个OnItemClick方法来显示这个图片在一个新的活动在全屏。我在Java编码。请帮帮我。由于

这是列表活动的代码(sqldatabase被称为aood)(在这个活动中还有一些其他的事情,所以不要奇怪)

公共类AoodList扩展AppCompatActivity {

GridView gridView;
ArrayList<Aood> list;
AoodAdapter adapter  = null;
GridView grid;
public static Bitmap bmp = null;
private String[]        FilePathStrings;
ImageView imageview;
private File[]          listFile;
File                    file;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aood_list_activity);
gridView = (GridView) findViewById(R.id.gridview1);
list = new ArrayList<>();
adapter = new AoodAdapter(this, R.layout.aood_items, list);
gridView.setAdapter(adapter);

Cursor cursor = MainActivity.sqLiteHelper.getData("SELECT * FROM AOOD");
list.clear();
while (cursor.moveToNext()) {
int id = cursor.getInt(0);
String name = cursor.getString(1);
String price = cursor.getString(2);
String date = cursor.getString(4);
byte[] image = cursor.getBlob(3);
list.add(new Aood(id, name, price, image, date));                 
}
adapter.notifyDataSetChanged();

公共类Aood {

private int id;
private String name;
private String price;
private String date;
private byte[] image;
public Aood(int id, String name, String price, byte[] image, String date) {      
this.id = id;
this.name = name;
this.price = price;
this.date = date;                                             
this.image = image;
}
public int getId() { return id; }
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getDate() {return date;}
public void setDate(String date) {this.date = date;}
public byte[] getImage() {
return image;
}
public void setImage(byte[] image) {
this.image = image;
}

}公共类AoodAdapter扩展BaseAdapter {

private Context context;
private int layout;
private ArrayList<Aood> aoodList;
public AoodAdapter(Context context, int layout, ArrayList<Aood> aoodList) {
this.context = context;
this.layout = layout;
this.aoodList = aoodList;
}
@Override
public int getCount() {
return aoodList.size();
}
@Override
public Object getItem(int position) {
return aoodList.get (position);
}
@Override
public long getItemId(int position) {
return position;
}

private class ViewHolder{
ImageView imageView;
TextView txtName, txtPrice, txtDate;
}
@Override
public View getView(int position, View view, ViewGroup ViewGroup) {
View row = view;
ViewHolder holder = new ViewHolder();
if(row == null){
LayoutInflater inflater =(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(layout, null);
holder.txtName = (TextView) row.findViewById(R.id.txtName);
holder.txtPrice = (TextView) row.findViewById(R.id.txtPrice);
holder.txtDate = (TextView) row.findViewById(R.id.txtDate);
holder.imageView = (ImageView) row.findViewById(R.id.imgAood);
row.setTag(holder);
}
else {
holder = (ViewHolder) row.getTag();
}
Aood aood = aoodList.get(position);
holder.txtName.setText(aood.getName());
holder.txtPrice.setText(aood.getPrice());
holder.txtDate.setText(aood.getDate());
byte[] aoodImage = aood.getImage();
Bitmap bitmap = BitmapFactory.decodeByteArray(aoodImage, 0, aoodImage.length);
holder.imageView.setImageBitmap(bitmap);
return row;
}

}

你需要创建一个接口来处理你的onClick事件:

public  interface IClickListener {
<T> void onClick(T model);
}

然后将适配器更改为以下内容,在构造函数中接收IClickListener,在imageView中接收setOnClickLister并触发onClick事件:

public class AoodAdapter extends BaseAdapter {
private Context context;
private int layout;
private ArrayList<Aood> aoodList;
private IClickListener clickListener //register clickListener to trigger onClick event
public AoodAdapter(Context context, int layout, ArrayList<Aood> aoodList, IClickListener clickListener) {
this.context = context;
this.layout = layout;
this.aoodList = aoodList;
this.clickListener = clickListener;
}
@Override
public int getCount() {
return aoodList.size();
}
@Override
public Object getItem(int position) {
return aoodList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}

private class ViewHolder {
ImageView imageView;
TextView txtName, txtPrice, txtDate;
}
@Override
public View getView(int position, View view, ViewGroup ViewGroup) {
View row = view;
ViewHolder holder = new ViewHolder();
if (row == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(layout, null);
holder.txtName = (TextView) row.findViewById(R.id.txtName);
holder.txtPrice = (TextView) row.findViewById(R.id.txtPrice);
holder.txtDate = (TextView) row.findViewById(R.id.txtDate);
holder.imageView = (ImageView) row.findViewById(R.id.imgAood);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
Aood aood = aoodList.get(position);
holder.txtName.setText(aood.getName());
holder.txtPrice.setText(aood.getPrice());
holder.txtDate.setText(aood.getDate());
//setOnClickListener on imageView to trigger your interface and pass clicked object
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickListener.onClick(aood);
}
});
byte[] aoodImage = aood.getImage();
Bitmap bitmap = BitmapFactory.decodeByteArray(aoodImage, 0, aoodImage.length);
holder.imageView.setImageBitmap(bitmap);
return row;
}
}

然后在Activity中实现你的接口并重写onClick,如下所示:

public class AoodList extends AppCompatActivity implements IClickListener {
GridView gridView;
ArrayList<Aood> list;
AoodAdapter adapter = null;
GridView grid;
public static Bitmap bmp = null;
private String[] FilePathStrings;
ImageView imageview;
private File[] listFile;
File file;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aood_list_activity);
gridView = (GridView) findViewById(R.id.gridview1);
list = new ArrayList<>();
adapter = new AoodAdapter(this, R.layout.aood_items, list, this); //pass IClickListener
gridView.setAdapter(adapter);

Cursor cursor = MainActivity.sqLiteHelper.getData("SELECT * FROM AOOD");
list.clear();
while (cursor.moveToNext()) {
int id = cursor.getInt(0);
String name = cursor.getString(1);
String price = cursor.getString(2);
String date = cursor.getString(4);
byte[] image = cursor.getBlob(3);
list.add(new Aood(id, name, price, image, date));
}
adapter.notifyDataSetChanged();
}

@Override
public <T> void onClick(T data) {
//then cast data onto your obj
Aood aood = (Aood) data;
}
}

最新更新