#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. Конечно, я отредактировал свой вопрос. Пожалуйста, найдите там класс адаптера.