簡體   English   中英

離線時Recyclerview不會調用onCreateViewHolder

[英]Recyclerview not call onCreateViewHolder when offline

當我的設備在線時,RecyclerView適配器可以按預期工作。 脫機時,不會調用onCreateViewHolder。

首先,我知道這一點: Recyclerview不調用onCreateViewHolder ,這不是問題。 getItemCount()返回一個大於0的數字,並且我在調用活動中正確設置了適配器和布局管理器的順序:

mAdapter = new MovieAdapter(this, this, movies, mScreenWidthPx, mIsFavorites);
    mMovieRecyclerView.setLayoutManager(new GridLayoutManager(this, numberOfColumns));
    mMovieRecyclerView.setAdapter(mAdapter);

因此,它似乎與在線/離線狀態有關,但我不知道如何操作。 這是適配器:

public class MovieAdapter extends RecyclerView.Adapter<MovieAdapter.ViewHolder> {

private static final String TAG = MovieAdapter.class.getSimpleName();

private ArrayList<Movie> mMovies;
private Context mContext;
private MovieClickListener mClickListener;
private int mScreenWidthPx;
private boolean mIsFavorite;

public interface MovieClickListener {
    void onMovieClick(Movie movie);
}

public MovieAdapter(Context context, MovieClickListener movieClickListener, ArrayList<Movie> movies, int screenWidthPx, boolean isFavorite) {
    Log.d(TAG,"creating MovieAdapter");
    this.mContext = context;
    this.mMovies = movies;
    this.mClickListener = movieClickListener;
    this.mScreenWidthPx = screenWidthPx;
    this.mIsFavorite = isFavorite;
    Log.d(TAG,"mMovies size constructor:" + mMovies.size());
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    Log.d(TAG,"onCreateViewHolder");
    View view = LayoutInflater.from(mContext).inflate(R.layout.item_movie, parent, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Log.d(TAG,"onBindViewHolder");
    if (mIsFavorite) {
        Log.d(TAG,"loading local image file");
        String fileName = ImageUtils.getMoviePosterFileName(mMovies.get(position).getTitle());
        File imageFile = ImageUtils.getImageFile(mContext,fileName);
        Picasso.with(mContext)
                .load(imageFile)
                .into(holder.mImagePoster);
    }
    else
        {
        Log.d(TAG,"loading remote image file");
        String posterUrl = NetworkUtils.buildMoviePosterUrl(mMovies.get(position).getPosterPath(), mScreenWidthPx);
        Picasso.with(mContext)
                .load(posterUrl)
                .into(holder.mImagePoster);
    }
}

@Override
public int getItemCount() {
    Log.d(TAG,"mMovies size getCount:" + mMovies.size());
    return mMovies.size();
}

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    @BindView(R.id.image_movie_poster) ImageView mImagePoster;

    ViewHolder(View itemView) {
        super(itemView);
        Log.d(TAG,"creating ViewHolder");
        ButterKnife.bind(this, itemView);
        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        int adapterPosition = getAdapterPosition();
        mClickListener.onMovieClick(mMovies.get(adapterPosition));
    }
}
}

這與網絡無關,網絡告訴我,當網絡狀態更改時,傳入的稱為movies數組可能已從另一個類更改。 祝好運。

在離線模式下,畢加索庫無法下載圖像,在這種情況下,圖像結果將為空。 您可能需要為Picasso設置NetworkPolicy,如下所示:-如果有網絡或不存在,請嘗試首先從緩存下載圖像,如果失敗,則從網絡下載。 這是代碼段:

Picasso.with(context)
                    .load(Uri.parse(getItem(position).getStoryBigThumbUrl()))
                    .networkPolicy(NetworkPolicy.OFFLINE)
                    .into(holder.storyBigThumb, new Callback() {
                        @Override
                        public void onSuccess() {

                        }

                        @Override
                        public void onError() {
                            // Try again online if cache failed
                            Picasso.with(context)
                                    .load(Uri.parse(getItem(position)
                                            .getStoryBigThumbUrl()))
                            .placeholder(R.drawable.user_placeholder)
                            .error(R.drawable.user_placeholder_error)
                                    .into(holder.storyBigThumb);
                        }
                    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM