Как передать выбранное изображение из GridView в пользовательский диалог оповещения - PullRequest
0 голосов
/ 17 мая 2018

В моем приложении для Android у меня есть действие с именем Галерея, которое отображает сетку. Каждая сетка содержит фотографию. У меня есть встроенный обработчик щелчков, который создает настраиваемое диалоговое окно предупреждения с кнопкой OK и ImageView. Я могу вручную установить источник ImageView на доступный для рисования ресурс (файл png), и он отображается правильно, но мне нужно иметь возможность отображать изображение, по которому щелкнули (в моем виде сетки), в диалоговом окне настраиваемого оповещения.

Вот мой код:

Activity_gallery, содержащая метод OnCreate:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gallery);

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this));
        final ImageView clickedImage = new ImageView(this);

        gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v,
                                    int position, long id) {
                loadPhoto(position);

            }
        });
    }

И мой метод loadPhoto, который вызывается из кода выше:

private void loadPhoto(int position) {

        AlertDialog.Builder imageDialog = new AlertDialog.Builder(this);
        LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);

        final View view = inflater.inflate(R.layout.custom_fullimage_dialog, null);

        ImageView image = (ImageView) view.findViewById(R.id.fullimage);

        Resources resources = getResources();

        image.setImageResource(R.drawable.webgallery_1);

        imageDialog.setView(view);
        imageDialog.setPositiveButton(R.string.label_ok, new DialogInterface.OnClickListener(){

            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }

        });

        imageDialog.create();
        imageDialog.show();
    }

Как видно из кода выше, я могу без проблем установить R.drawable.webgallery_1 в качестве источника фотографии. Но это будет отображать одно и то же изображение каждый раз, независимо от того, какая фотография нажата.

Как или что я могу перейти от основного кода к методу loadPhoto, чтобы можно было идентифицировать фотографию, по которой щелкнули? Я могу передать позицию, и это возвращает значение int позиции элемента, по которой щелкнули в виде сетки, но я не уверен, как использовать это для установки ресурса изображения в диалоговом окне предупреждения для фотографии, которая была щелкают.

1 Ответ

0 голосов
/ 17 мая 2018

Я получил это после некоторых проб и ошибок.Мне потребовалось внести изменения в класс ImageAdapter.См. Изменения ниже:

Основная активность

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gallery);

        final GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this));
        gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v,
                                    int position, long id) {
                Object myObject = gridview.getItemAtPosition(position);

                Integer myInt = ((Integer) myObject);
                loadPhoto(position, myInt);

            }
        });
    }

Метод loadPhoto:

private void loadPhoto(int position, Integer myInt) {

        AlertDialog.Builder imageDialog = new AlertDialog.Builder(this);
        LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);

        final View view = inflater.inflate(R.layout.custom_fullimage_dialog, null);

        ImageView image = (ImageView) view.findViewById(R.id.fullimage);

        Resources resources = getResources();
        image.setImageResource(myInt);

        imageDialog.setView(view);
        imageDialog.setPositiveButton(R.string.label_ok, new DialogInterface.OnClickListener(){

            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }

        });

        imageDialog.create();
        imageDialog.show();
    }

}

Класс ImageAdapter

public class ImageAdapter extends BaseAdapter {
    private Context mContext;
    public String id;
    //private final String[] mobileValues;
    String myString;

    public ImageAdapter(Context c) {
        mContext = c;
        //String myList[] = c.getResources().toString();
        //this.mobileValues = myList;

    }

    public int getCount() {
        int myCount = 0;
        Field[] fields = R.drawable.class.getFields();

        for (Field f : fields) {
            myString = f.getName();
            String stub = myString.substring(0, 3);

            if (stub.equals("web")) {
                //String drawableName = "R.drawable." + myString;
                int resID = ((Activity)mContext).getResources().getIdentifier(myString, "drawable", ((Activity)mContext).getPackageName());
                array_image.add(resID);

                myCount++;
            }
        }
        return (myCount);
    }

    public Object getItem(int position) {

        return array_image.get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;

        DisplayMetrics dm = new DisplayMetrics();
        ((Activity)mContext).getWindowManager().getDefaultDisplay().getMetrics(dm);
        int screenWidth = dm.widthPixels;

        int imageWidth = screenWidth / 2 - 50;

        if (convertView == null) {
            // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new ViewGroup.LayoutParams(imageWidth, imageWidth));
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(array_image.get(position));
        imageView.setTag(myString);
        return imageView;
    }

    private ArrayList<Integer> array_image = new ArrayList<Integer>();

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...