Изображение не отображается должным образом при использовании живых данных и дооснащения Android - PullRequest
0 голосов
/ 02 июля 2019

Все остальные данные отображаются за исключением одного изображения, которое отображается неправильно.

Ниже приведен код.

public class MainActivity extends AppCompatActivity {
    ArrayList<Movies> articleArrayList = new ArrayList<>();
    MoviesAdapter newsAdapter;
    RecyclerView rvHeadline;
    MoviesViewModel newsViewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rvHeadline = findViewById(R.id.rvNews);

        newsViewModel = ViewModelProviders.of(this).get(MoviesViewModel.class);
        newsViewModel.init();
        newsViewModel.getNewsRepository().observe(this, newsResponse -> {
            List<Movies> newsArticles = null;
            if (newsResponse != null) {
                newsArticles = newsResponse.getMovies();
                articleArrayList.addAll(newsArticles);
                newsAdapter.notifyDataSetChanged();
            }
        });
        setupRecyclerView();
    }

    private void setupRecyclerView() {
        if (newsAdapter == null) {
            newsAdapter = new MoviesAdapter(MainActivity.this, articleArrayList);
            rvHeadline.setLayoutManager(new LinearLayoutManager(this));
            rvHeadline.setAdapter(newsAdapter);
            rvHeadline.setItemAnimator(new DefaultItemAnimator());
            rvHeadline.setNestedScrollingEnabled(true);
        } else {
            newsAdapter.notifyDataSetChanged();
        }
    }
}


public class MoviesAdapter extends RecyclerView.Adapter<MoviesAdapter.MoviesViewHolder> {
    Context context;
    ArrayList<Movies> articles;

    public MoviesAdapter(Context context, ArrayList<Movies> articles) {
        this.context = context;
        this.articles = articles;
    }

    @NonNull
    @Override
    public MoviesAdapter.MoviesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.movies_item, parent, false);
        return new MoviesViewHolder(view);
    }
    @Override
    public void onBindViewHolder(@NonNull MoviesAdapter.MoviesViewHolder holder, int position) {
        holder.tvName.setText(articles.get(position).getTitle()); //this is working
        holder.tvDesCription.setText(articles.get(position).getDirector());
        String url = articles.get(position).getPoster();
        if(url!=null) {
           /* Glide.with(context) //passing context
                    .load(url) //passing your url to load image.
                    .dontAnimate()
                    .placeholder(context.getDrawable(R.drawable.ic_launcher_background)) //this would be your default image (like default profile or logo etc). it would be loaded at initial time and it will replace with your loaded image once glide successfully load image using url.
                    .centerCrop()//this method help to fit image into center of your ImageView
                    .into(holder.ivNews);*/ //pass imageView reference to appear the image.*/
            Picasso.get()
                    .load(url)
                    .placeholder(R.drawable.ic_launcher_background)
                    .error(R.drawable.ic_launcher_background)
                    .into(holder.ivNews);
        }
    }
    @Override
    public int getItemCount() {
        return articles.size();
    }

    public class MoviesViewHolder extends RecyclerView.ViewHolder {

        TextView tvName;
        TextView tvDesCription;
        ImageView ivNews;

        public MoviesViewHolder(@NonNull View itemView) {
            super(itemView);

            tvName = itemView.findViewById(R.id.tvName);
            tvDesCription = itemView.findViewById(R.id.tvDesCription);
            ivNews = itemView.findViewById(R.id.ivNews);

        }
    }
}

Я не могу понять, где именно я делаю ошибку.Потому что изображение из ответа отображается только для определенной таблицы, в то время как для других оно дублируется отображением тех же изображений или не отображается тоже.Я также использовал Glide и Picasso, но изображение не отображается из ответа для какого-то списка.

1 Ответ

0 голосов
/ 03 июля 2019

при использовании адаптера, если и то и другое условие в это время .. просто добавьте этот код в ваш проект:

 if(url!=null){
        Picasso.get()
                .load(url)
                .placeholder(R.drawable.ic_launcher_background)
                .error(R.drawable.ic_launcher_background)
                .into(holder.ivNews);
    } else {
        Picasso.get()
                .load(R.drawable.ic_launcher_background)
                .error(R.drawable.ic_launcher_background)
                .into(holder.ivNews);
    }
...