How to solve this problem:
Since we have two JSON objects that we have to receive, and on our way, the List “runs” (and the second JSON object is also String).
We do the following:
1) Add to MainActivity
private List<Groupss> mList =new ArrayList<>();
2) Next, we announce:
adapter = new DataAdapter(mList);
3) Adjust the onResponse method:
public void onResponse(Call<DropDown> call, Response<DropDown> response) { DropDown jsonResponse = response.body(); mList.addAll(jsonResponse.getForm().getmGroupss()); adapter.notifyDataSetChanged(); Log.d("type",jsonResponse.getForm().getmGroupss().get(1).getmControls().get(2).getTitle()+" drop");
4) Then we adjust our adapter. Personally, I used two ViewHolder's in the application. Briefly about it, the code is like this:
public class DataAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { public static final int TYPE_TEXTVIEW = 0; public static final int TYPE_EDITVIEW = 1; private List<Groupss> mList; public DataAdapter(List<Groupss> list) { this.mList = list; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view; switch (viewType) { case 0: view = LayoutInflater.from(parent.getContext()).inflate(R.layout.text_numeric, parent, false); return new NumericViewHolder(view); case 1: view = LayoutInflater.from(parent.getContext()).inflate(R.layout.drop_down_options, parent, false); return new DropDownViewHolder(view); default: view = LayoutInflater.from(parent.getContext()).inflate(R.layout.drop_down_options, parent, false); return new DropDownViewHolder(view); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { Groupss grup = mList.get(position); final int itemType = getItemViewType(position); switch (itemType){ case TYPE_TEXTVIEW: ((NumericViewHolder) holder).title.setText(String.valueOf(grup.getmControls().get(0).getTitle())); break; case TYPE_EDITVIEW: ((DropDownViewHolder) holder).title_options.setText(String.valueOf(grup.getmControls().get(0).getTitle())); break; default: ((DropDownViewHolder) holder).title_options.setText("Not found"); break; } } @Override public int getItemCount() { if (mList == null) return 0; return mList.size(); } @Override public int getItemViewType(int position) { int temp= -1; if (mList.get(position).getmControls().size()>0) switch (mList.get(position).getmControls().get(0).getTitle()){ case "textbox_numeric": temp=0; break; case "drop_down_options": temp = 1; break; default: temp =1; } return temp; } public class NumericViewHolder extends RecyclerView.ViewHolder { private TextView title; public NumericViewHolder(View itemView) { super(itemView); title = (TextView) itemView.findViewById(R.id.title); } } public class DropDownViewHolder extends RecyclerView.ViewHolder { private EditText title_options; public DropDownViewHolder(View itemView) { super(itemView); title_options = (EditText) itemView.findViewById(R.id.title_options); } }
Something like this)
jsonResponse.getForm().getmGroupss().get(<тут индекс элемента в массиве>).getmFirst().get(<тут индекс элемента в массиве>).getTitle();
- Vladyslav Matviienko