【发布时间】:2016-07-28 20:02:03
【问题描述】:
我正在使用 Recyclerview 适配器将图像放入 Recyclerview 我的代码逻辑是在解析后从 JSON 中获取图像 URL,然后适配器应将图像放入 Recyclerview 中。 图片 URL 取决于某些 SharedPreferences,但问题是当 SharedPreferences 更改时,图片不会随之改变,它们只会在我重新启动应用程序时改变
我的 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()));
}
}
这是根据 SharedPreferences 更改图像 URL 的方式
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);
}}
我在 MoviesData 类中设置所有数据(包括图像 URL)的函数
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;
}
【问题讨论】:
标签: android json android-recyclerview sharedpreferences