我正在使用Recyclerview適配器將圖像放入Recyclerview中 我的代碼邏輯是在解析它之後從JSON獲取圖像URL,然後適配器應將圖像放入Recyclerview中。 的圖像URL取決於某些SharedPreferences,但問題是當SharedPreferences改變圖像不會隨之改變,他們只當我重新啓動應用程序更改Recyclerview適配器數據不會更改
我Recyclerview適配器:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
public Context context;
public ArrayList<MoviesData> array;
public LayoutInflater inflater;
RecyclerViewAdapter(Context context,ArrayList<MoviesData> array)
{
this.context = context;
this.array = array;
this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public class ViewHolder extends RecyclerView.ViewHolder {
ImageView image;
public ViewHolder(View itemView) {
super(itemView);
image = (ImageView) itemView.findViewById(R.id.oneMovieBlockImageView);
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View rootview = inflater.inflate(R.layout.movie_block,parent,false);
ViewHolder viewHolder = new ViewHolder(rootview);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Picasso.with(context).load(array.get(position).getPoster_path()).into(holder.image);
}
@Override
public int getItemCount() {
return array.size();
}}
onPostExecute方法
@Override
protected void onPostExecute(ArrayList<MoviesData> result) {
if (result != null) {
recyclerView = (RecyclerView) getActivity().findViewById(R.id.recyclerview);
adapter = new RecyclerViewAdapter(getActivity(),moviesDatas);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
}
}
這是圖像URL應該如何取決於SharedPreferences改變
if(sortByStr.equals("popular"))
{
url = new URL("http://api.themoviedb.org/3/movie/popular?api_key=9a005dd380ec772cf6045b8c370f8ef7");
}
else if(sortByStr.equals("top_rated"))
{
url = new URL("http://api.themoviedb.org/3/movie/top_rated?api_key=9a005dd380ec772cf6045b8c370f8ef7");
}
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
我MoviesData類在那裏我收集裏面
public class MoviesData implements Parcelable{
MoviesData()
{
}
private String title,rate,release,overview,poster_path;
protected MoviesData(Parcel in) {
title = in.readString();
rate = in.readString();
release = in.readString();
overview = in.readString();
poster_path = in.readString();
}
public static final Creator<MoviesData> CREATOR = new Creator<MoviesData>() {
@Override
public MoviesData createFromParcel(Parcel in) {
return new MoviesData(in);
}
@Override
public MoviesData[] newArray(int size) {
return new MoviesData[size];
}
};
public void setTitle(String title) {
this.title = title;
}
public void setRate(String rate) {
this.rate = rate;
}
public void setRelease(String release) {
this.release = release;
}
public void setOverview(String overview) {
this.overview = overview;
}
public void setPoster_path(String poster_path) {
this.poster_path = "http://image.tmdb.org/t/p/w185" + poster_path;
}
////////////////////////////////////////////////////
public String getTitle() {
return title;
}
public String getRate() {
return rate;
}
public String getRelease() {
return release;
}
public String getOverview() {
return overview;
}
public String getPoster_path() {
return poster_path;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(title);
dest.writeString(rate);
dest.writeString(release);
dest.writeString(overview);
dest.writeString(poster_path);
}}
而這個功能在哪裏設置的所有數據(包括圖片URL)中的所有數據MoviesData類
private ArrayList<MoviesData> getMoviesDataFromJson(String moviesJsonStr) throws JSONException
{
JSONObject forecastJson = new JSONObject(moviesJsonStr);
JSONArray moviesArray = forecastJson.getJSONArray("results");
for(int i = 0; i <moviesArray.length(); i++)
{
JSONObject movieObject = moviesArray.getJSONObject(i);
MoviesData movie = new MoviesData();
movie.setPoster_path(movieObject.getString("poster_path"));
movie.setTitle(movieObject.getString("title"));
movie.setOverview(movieObject.getString("overview"));
movie.setRate(movieObject.getString("vote_average"));
movie.setRelease(movieObject.getString("release_date"));
moviesDatas.add(movie);
}
return moviesDatas;
}
我不知道爲什麼,但它似乎並沒有工作 –
你可以發佈代碼設置URL到MoviesData的代碼? – jos
我已更新我的問題 –