#java #android #image #android-recyclerview
#java #Android #изображение #android-recyclerview
Вопрос:
Я использую этот код для отображения предустановленного изображения в recyclerview, но по какой-то причине оно не отображается. Если у кого-то есть какие-либо исправления, я был бы им очень признателен, если бы они поделились им.
Моя основная активность:
public class MangadexDisplay extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mangadex_display);
ArrayList<String> imgUrl = new ArrayList<>();
RecyclerView recyclerView = findViewById(R.id.mangaRecycler);
LinearLayoutManager Manager = new LinearLayoutManager(MangadexDisplay.this);
recyclerView.setLayoutManager(Manager);
MyAdapter adapter = new MyAdapter(imgUrl, MangadexDisplay.this);
recyclerView.setAdapter(adapter);
imgUrl.add("http://thewowstyle.com/wp-content/uploads/2015/01/nature-images..jpg");
adapter.notifyDataSetChanged();
}
}
Мой MyAdapter.java:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{
ArrayList<String> urls;
Context context;
//constructor
public MyAdapter(ArrayList<String> ImgUrl, Context context_)
{
this.urls = ImgUrl;
this.context = context_;
}
public static class ViewHolder extends RecyclerView.ViewHolder
{
private final ImageView image;
public ViewHolder(View v)
{
super(v);
image =(ImageView)v.findViewById(R.id.mangaImage);
}
public ImageView getImage(){ return this.image;}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_mangadex_display, parent, false);
v.setLayoutParams(new RecyclerView.LayoutParams(1080,800));
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position)
{
Glide.with(this.context)
.load(urls.get(position))
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(holder.getImage());
}
@Override
public int getItemCount()
{
return urls.size();
}
}
Если это поможет, я использую glide, как показано выше, для загрузки изображения, если есть другая альтернатива, если это проблема, я был бы рад это услышать.
Вот код макета:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MangadexDisplay"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@ id/mangaRecycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@ id/mangaImage"
android:layout_width="381dp"
android:layout_height="650dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</LinearLayout>
Комментарии:
1. Что именно вы видите? Можете ли вы поделиться изображением?
2. @tomerpacific Абсолютно ничего, просто пустой recyclerview
3. Для
ViewHolder
класса вы должны использовать другой макет с видом элемента. Вы можете найти дополнительную информацию здесь developer.android.com/guide/topics/ui/layout/recyclerview4. @Stanislav Bondar Я не понимаю, как мне это сделать
Ответ №1:
Вам нужен отдельный элемент для изображения. например, создайте файл в layouts item_manga.xml с
<ImageView
android:id="@ id/mangaImage"
android:layout_width="381dp"
android:layout_height="650dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
И ваш viewholder должен выглядеть как-то так
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType)
{
View itemView = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.item_manga, viewGroup, false);
return new ViewHolder(itemView);
}
У меня нет опыта работы с Glide, поэтому я ничего не могу сказать об этом. Но вы можете попробовать это с локальным изображением, чтобы посмотреть, работает ли оно
holder.image.setImageBitmap(bitmap)
Комментарии:
1. Спасибо @Felix Из-за тебя я понял, что мне нужно использовать a
Constrained layout
, а не aLinearLayout
.