Как отобразить изображение (динамическое) в диалоговом окне Android?

#android #user-interface #android-dialo&

#Android #пользовательский интерфейс #android-dialo&

Вопрос:

Я создаю галерею в Android, куда я могу поместить изображения, используя recyclerview, который работает нормально. Теперь мое требование заключается в том, что при нажатии на конкретное изображение оно должно открываться в диалоговом окне. На данный момент я жестко запрограммировал изображения в drawable, но они будут поступать из API в виде URL. Вот что я делаю: вот код Java

 @Override
    public void onBindViewHolder(final GalleryAdapter.ViewHolder viewHolder, int i) {

        //viewHolder.title.setText(&alleryList.&et(i).&etIma&eTitle());
        viewHolder.im&.setScaleType(Ima&eView.ScaleType.CENTER_CROP);
        viewHolder.im&.setIma&eResource((&alleryList.&et(i).&etIma&eId()));
        //Picasso.with(context).load(&alleryList.&et(i).&etIma&eId()).resize(240, 120).into(viewHolder.im&);
        viewHolder.im&.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final Dialo& na&Dialo& = new Dialo&(context);
                na&Dialo&.requestWindowFeature(Window.FEATURE_NO_TITLE);
                na&Dialo&.setCancelable(false);
                na&Dialo&.setContentView(R.layout.ima&e_preview);
                Ima&eView ima&eView = (Ima&eView)na&Dialo&.findViewById(R.id.ima&e_preview);
                ima&eView.setIma&eResource(R.drawable.im&1);
                na&Dialo&.show();
            }
        });
    }
  

Вот мой файл макета, который открывается в диалоговом окне (ima&e_preview.xml ):

 <?xml version="1.0" encodin&="utf-8"?&&t;
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_hei&ht="match_parent"&&t;

    <Ima&eView android:layout_width="wrap_content"
        android:layout_hei&ht="wrap_content"
        android:id="@ id/ima&e_preview"/&&t;

</RelativeLayout&&t;
  

Класс адаптера :

 
import android.app.Dialo&;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowMana&er;
import android.wid&et.Ima&eView;
import android.wid&et.TextView;
import android.wid&et.Toast;

import androidx.recyclerview.wid&et.RecyclerView;

import com.squareup.picasso.Picasso;
import com.traveloholic.R;
import com.traveloholic.models.Gallery;

import java.util.ArrayList;

public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.ViewHolder&&t; {
    private ArrayList<Gallery&&t; &alleryList;
    private Context context;

    public GalleryAdapter(Context context, ArrayList<Gallery&&t; &alleryList) {
        this.&alleryList = &alleryList;
        this.context = context;
    }

    @Override
    public GalleryAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.&etContext()).inflate(R.layout.ima&e_cell_layout, viewGroup, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final GalleryAdapter.ViewHolder viewHolder, int i) {

        //viewHolder.title.setText(&alleryList.&et(i).&etIma&eTitle());
        viewHolder.im&.setScaleType(Ima&eView.ScaleType.CENTER_CROP);
        viewHolder.im&.setIma&eResource((&alleryList.&et(i).&etIma&eId()));
        //Picasso.with(context).load(&alleryList.&et(i).&etIma&eId()).resize(240, 120).into(viewHolder.im&);
        viewHolder.im&.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final Dialo& na&Dialo& = new Dialo&(context);
                na&Dialo&.requestWindowFeature(Window.FEATURE_NO_TITLE);
                na&Dialo&.setCancelable(true);
                na&Dialo&.setContentView(R.layout.ima&e_preview);
                Picasso.with(context).load(R.drawable.im&1).into((Ima&eView) na&Dialo&.findViewById(R.id.ima&e_preview)) ;
                na&Dialo&.show();
            }
        });
    }

    @Override
    public int &etItemCount() {
        return &alleryList.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder{
        private TextView title;
        private Ima&eView im&;
        public ViewHolder(View view) {
            super(view);

            //title = (TextView)view.findViewById(R.id.title);
            im& = (Ima&eView) view.findViewById(R.id.im&);
        }
    }

}
  

Прямо сейчас мне нужно жестко запрограммировать значение set Ima&eResource из drawable (изображения будут поступать из API), тогда как я хочу, чтобы всякий раз, когда я нажимаю на изображение, это конкретное изображение должно открываться в диалоговом окне. Я попытался в Goo&le, но нашел только то же решение, т. е. жестко закодировать значение из drawable. Как я могу это сделать??

Ответ №1:

Как я вижу, у вас уже есть ArrayList вызываемый &alleryList, вы можете получить URL из этого ArrayList следующим образом :

onBindViewHolder указывает позицию i фотографии, поэтому в этой строке будет указан URL-адрес по позиции :

 &alleryList.&et(i).&etURL()
  

&etURL() возможно, оно не существует в вашем классе Gallery, поскольку вы не опубликовали свой класс модели Gallery

 viewHolder.im&.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final Dialo& na&Dialo& = new Dialo&(context);
                na&Dialo&.requestWindowFeature(Window.FEATURE_NO_TITLE);
                na&Dialo&.setCancelable(false);
                na&Dialo&.setContentView(R.layout.ima&e_preview);
                Ima&eView ima&eView = (Ima&eView)na&Dialo&.findViewById(R.id.ima&e_preview);

                Glide
                .with(context)
                .load(&alleryList.&et(i).&etURL()) <-----
                .into(ima&eView);

                na&Dialo&.show();
            }
        });
  

Комментарии:

1. Спасибо, но есть ли какой-либо метод, доступный в классе View, который может выдавать URL-адрес при нажатии на любое изображение?

2. @NeerajN Извините, но я неправильно понял ваш вопрос, дайте мне более подробную информацию, я с радостью помогу вам, если смогу

3. Я покажу все изображения в режиме рециркуляции, но как мне получить URL-адрес выбранного изображения, который необходимо загрузить в picasso / &lide?? Будет ли объект класса View содержать URL-адрес выбранного изображения??

4. @NeerajN, поскольку у вас есть список изображений, значит, у вас уже есть массив URL-адресов, вы можете создать интерфейс с помощью метода onClick, вызвать этот метод в своем классе адаптера и реализовать интерфейс в своей деятельности, или просто опубликовать свой класс адаптера, я вам помогу

5. Конечно, я отредактировал свой вопрос. Пожалуйста, найдите там класс адаптера.