2017-10-08 116 views
0

我试图创建在ArrayList 显示RecyclerViewAdapter但我对公共RecyclerViewHolder问题在代码的底部。我应该在它曾经ArrayList,或使它像下面的代码:RecycleView显示适配器ArrayList中使用JSON数据

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.RecyclerViewHolder> { 

    private static final String TAG = RecyclerViewAdapter.class.getSimpleName(); 
    ArrayList<MovieItem> mMoviesItems; 
    private Context context; 

    public RecyclerViewAdapter(ArrayList<MovieItem> MoviesItems) { 
     mMoviesItems = MoviesItems; 
    } 

    @Override 
    public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 
     context = viewGroup.getContext(); 
     int layoutIdForListItem = R.layout.movie_list_item; 
     LayoutInflater inflater = LayoutInflater.from(context); 
     boolean shouldAttachToParentImmediately = false; 

     View view = inflater.inflate(layoutIdForListItem, viewGroup, shouldAttachToParentImmediately); 
     RecyclerViewHolder viewHolder = new RecyclerViewHolder(view); 

     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerViewHolder holder, int position) { 
     holder.MoviePopularity.setText(mMoviesItems.get(position).getPopularity(popularity)); 
     Picasso.with(this.context).load(mMoviesItems.get(position).getPhoto(poster_path)).into(holder.MoviePoster); 
     holder.MovieName.setText(mMoviesItems.get(position).getName(original_title)); 
    } 

    @Override 
    public int getItemCount() { 
     return mMoviesItems.size(); 
    } 

    class RecyclerViewHolder extends RecyclerView.ViewHolder { 

     TextView MoviePopularity; 
     ImageView MoviePoster; 
     TextView MovieName; 

     public RecyclerViewHolder(View itemView) { 
      super(itemView); 
      MoviePopularity = (TextView)itemView.findViewById(R.id.movie_popularity); 
      MoviePoster = (ImageView)itemView.findViewById(R.id.iv_item_movie); 
      MovieName = (TextView)itemView.findViewById(R.id.movie_name); 
     } 
    } 
} 

我也有一个问题,onBindViewHolder()我得到下poster_path,ORIGINAL_TITLE和普及

这是我的自定义类的代码错误:

public class MovieItem { 
    private double popularity; 
    private String photo; 
    private String name; 

    public MovieItem(double popularity, String poster_path, String original_title) { 
     this.popularity = this.popularity; 
     this.photo = photo; 
     this.name = name; 
    } 

    public double getPopularity(double popularity) { return popularity; } 
    public String getPhoto() { return photo; } 
    public String getName() { 
     return name; 
    } 
} 

而且Json数据类:

public final class OpenMovieJsonUtils { 

    public static ArrayList<MovieItem> getSimpleMovieStringsFromJson(Context context, String moviesJsonString) 
      throws JSONException { 

     final String RESULTS = "results"; 
     final String POPULARITY = "popularity"; 
     final String POSTER_PATH = "poster_path"; 
     final String ORIGINAL_TITLE = "original_title"; 

     ArrayList<MovieItem> parsedMovieData = new ArrayList<MovieItem>(); 

     JSONObject moviesObject = new JSONObject(moviesJsonString); 
     JSONArray moviesArray = moviesObject.getJSONArray(RESULTS); 

     for (int i = 0; i < moviesArray.length(); i++) { 
      double popularity; 
      String poster_path; 
      String original_title; 

      moviesObject = moviesArray.getJSONObject(i); 

      popularity = moviesObject.getDouble(POPULARITY); 
      poster_path = moviesObject.getString(POSTER_PATH); 
      original_title = moviesObject.getString(ORIGINAL_TITLE); 

      parsedMovieData.add(new MovieItem(popularity, poster_path, original_title)); 

     } 

     return parsedMovieData; 
    } 
} 
+0

您收到的错误是什么?请张贴错误日志。 – merterpam

+5

**请不要恶意破坏你的帖子。**继续这样做可能会导致暂停。 – Glorfindel

回答

0

要初始化你的人气场相同的全局字段,以便它在默认情况下始终null。也改变你的getter method.Change你MovieItem类是这样的:

public class MovieItem { 
private double popularity; 
private String photo; 
private String name; 

public MovieItem(double popularity, String poster_path, String original_title) { 
    this.popularity = popularity; 
    this.photo = photo; 
    this.name = name; 
} 

public double getPopularity() { return popularity; } 
public String getPhoto() { return photo; } 
public String getName() { return name; } 

现在改变你的onBindViewHolder方法类似thhis:

@Override 
public void onBindViewHolder(RecyclerViewHolder holder, int position) { 
    holder.MoviePopularity.setText(String.valueOf(mMoviesItems.g‌​et(position).getPopu‌​larity())); 
    Picasso.with(this.context).load(mMoviesItems.get(position).getPhoto()).into(holder.MoviePoster); 
    holder.MovieName.setText(mMoviesItems.get(position).getName()); 
} 
+0

我改变一切,就像你说的,但现在我的'holder.MoviePopularity.setText下得到错误(mMoviesItems.get(位置).getPopularity());'所以我只添加(INT)mMoviesItems是好的在这里补充诠释?这 – user8043603

+0

人气走了之后所有的错误是double值,因此将其更改为'holder.MoviePopularity.setText(将String.valueOf(mMoviesItems.get(位置).getPopularity()));' – ved

相关问题