首页 > 解决方案 > 如何通过imageview为网格视图设置事件

问题描述

我是新手,刚学习 Java 大约 1 个月。我正在尝试按网格视图创建组图片,如果我单击任何图片,然后显示用户警报对话框,询问用户是否要删除图片。但不知何故,当我尝试按图像为网格视图设置事件时。我无法启动应用程序。可以帮助我找到崩溃导致应用程序无法启动的位置。

package com.example.hi.gridviewhinhanh;

import android.content.DialogInterface;
import android.content.Intent;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {

        ArrayList<Danhsachhinhanh> manghinhanh;
        HinhanhAdapter arrayAdapter;
        GridView gridView;
        ImageView imgView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        gridView = findViewById(R.id.gridview);
        manghinhanh = new ArrayList<>();
        manghinhanh.add(new Danhsachhinhanh(R.drawable.chupanh));
        manghinhanh.add(new Danhsachhinhanh(R.drawable.goidien));
        manghinhanh.add(new Danhsachhinhanh(R.drawable.photoshop));
        manghinhanh.add(new Danhsachhinhanh(R.drawable.quality));
        manghinhanh.add(new Danhsachhinhanh(R.drawable.secutiry));
        manghinhanh.add(new Danhsachhinhanh(R.drawable.signuptoday));
        arrayAdapter = new HinhanhAdapter(MainActivity.this, manghinhanh);
        gridView.setAdapter(arrayAdapter);
        
        imgView = findViewById(R.id.imageviewHinhanh);
        imgView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder hopthoai = new AlertDialog.Builder(MainActivity.this);
                hopthoai.setTitle("Do you want to delete");
                hopthoai.setMessage("Please confirm");
                hopthoai.setIcon(R.mipmap.ic_launcher);
                hopthoai.setCancelable(false);
                hopthoai.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });
                hopthoai.setNegativeButton("No", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this, "You choose No", Toast.LENGTH_SHORT).show();
                    }
                });
            }
        });
    }
}

package com.example.hi.gridviewhinhanh;

import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ImageView;

import java.util.ArrayList;
import java.util.List;

public class HinhanhAdapter extends BaseAdapter {

    Context context;
    ArrayList<Danhsachhinhanh> danhsachhinhanhArrayList;
    public  HinhanhAdapter (Context context, ArrayList<Danhsachhinhanh> danhsachhinhanhArrayList){
        this.context = context;
        this.danhsachhinhanhArrayList = danhsachhinhanhArrayList;

    }

    @Override
    public int getCount() {
        return danhsachhinhanhArrayList.size();
    }

    @Override
    public Object getItem(int position) {
        return danhsachhinhanhArrayList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        LayoutInflater inflater = LayoutInflater.from(context);
        convertView = inflater.inflate(R.layout.dong_item_gridviewhinhanh,null);
        ImageView imageView = convertView.findViewById(R.id.imageviewHinhanh);
        Danhsachhinhanh danhsachhinhanh = (Danhsachhinhanh) getItem(position);
        imageView.setImageResource(danhsachhinhanh.getHinhanh());

        return convertView;
    }

}

标签: javaandroid

解决方案


将您的 imageView clickListener 放在 Adapter 的 getView() 中并再次检查。

因为那里不存在您的 imageView。有关更多信息,请阅读适配器和回收视图。


推荐阅读