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();
私は
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クラスに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
私の質問を更新しました –