我想使用适配器和模型类将嵌套的JSON数据显示到recylerview中

请专注于适配器,因为我想对如何在适配器中显示数据提出建议。

user.json

{
  "UserDetails":
  [
    {
      "firstName" : "KP","lastName" : "xyz","location" : "goa","websites" : [
        {
          "description" : "work","URL" : "digitalocean"
        },{
          "description" : "tutorials","URL" : "digitalocean/community/tutorials"
        }
      ],"socialMedia" : [
        {
          "description" : "twitter","link" : "twitter/digitalocean"
        },{
          "description" : "facebook","link" : "facebook/DigitalOceanCloudHosting"
        }
      ]
    },{
      "firstName" : "NP","lastName" : "ABC","location" : "Shimla","link" : "facebook/DigitalOceanCloudHosting"
        },{
          "description" : "github","link" : "github/digitalocean"
        }
      ]
    }

  ]
} 

Mainactivity.java

private void prepareMovieData() {

    try {
        JSONObject obj = new JSONObject(loadJSONFromAsset());

        JSONArray mUserDetailsArray = obj.getJSONArray("UserDetails");

        for (int i = 0; i < mUserDetailsArray.length(); i++) {
            User user = new User();
            JSONObject jo_inside = mUserDetailsArray.getJSONObject(i);
            user.setfirst_name(jo_inside.getString("firstName"));
            user.setLast_name(jo_inside.getString("lastName"));
            user.setLocation(jo_inside.getString("location"));
            Log.d("Details-->",jo_inside.getString("firstName"));

            JSONArray mWebsitesArray = jo_inside.getJSONArray("websites");
            Log.d("Details mWebsites-->",String.valueOf(jo_inside.getJSONArray("websites")));
            for (int j = 0; j < mWebsitesArray.length(); j++) {
                Websites websites = new Websites();
                JSONObject challengeObject = mWebsitesArray.getJSONObject(j);
                websites.setDescription(challengeObject.getString("description"));
                websites.setURL(challengeObject.getString("URL"));
                user.getWebsites().add(websites);
            }

            userList.add(user);
        }
    } catch (JSONException e) {
        Log.d("Error-->",e.getMessage());
        e.printStackTrace();
    }

    mAdapter.notifyDataSetChanged();
}

MovieAdapter.java

class MyViewHolder extends RecyclerView.ViewHolder {

    public TextView title1,year1,genre1,txtDescription1,txtUrl1,txtDescription2,txtUrl2;

        public MyViewHolder(View view) {
            super(view);
            title1 = (TextView) view.findViewById(R.id.txttitle);
            genre1 = (TextView) view.findViewById(R.id.txtgenre);
            year1 = (TextView) view.findViewById(R.id.txtyear);
            txtDescription1 = (TextView) view.findViewById(R.id.txtDescription1);
            txtUrl1 = (TextView) view.findViewById(R.id.txtUrl1);
            txtDescription2 = (TextView) view.findViewById(R.id.txtDescription2);
            txtUrl2 = (TextView) view.findViewById(R.id.txtUrl2);
        }
    }


    public MoviesAdapter(List<User> moviesList) {
        this.moviesList = moviesList;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
        View itemView = LayoutInflater.from(parent.getcontext())
                .inflate(R.layout.demo_movie_list_row,parent,false);

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder,int position) {

        User user = moviesList.get(position);
        holder.title1.setText(user.getFirst_name());
        holder.genre1.setText(user.getLast_name());
        holder.year1.setText(user.getLocation());
        holder.txtDescription1.setText(user.getWebsites().get(0).getDescription());
        holder.txtUrl1.setText(user.getWebsites().get(0).getURL());
        holder.txtDescription2.setText(user.getWebsites().get(1).getDescription());
        holder.txtUrl2.setText(user.getWebsites().get(1).getURL());

    }
}
quguangliang 回答:我想使用适配器和模型类将嵌套的JSON数据显示到recylerview中

用单个txtUrl(垂直)替换所有LinearLayout,并在网站列表中循环,为每个网站添加单个TextView。这将确保您的视图将采用任意数量的动态网站。

@Override
public void onBindViewHolder(MyViewHolder holder,int position) {

    User user = moviesList.get(position);

    for (Websites website in user.getWebsites()) {
        TextView txtUrl = new TextView(context);
        txtUrl.setText(website.getURL());
        holder.layoutUrls.addView(txtUrl);
    }

}
本文链接:https://www.f2er.com/3161977.html

大家都在问