Donate. I desperately need donations to survive due to my health

Get paid by answering surveys Click here

Click here to donate

Remote/Work from Home jobs

Update list view from item clicked on Recycler view

I created a get request to fetch this data After fetching the data, I added created a class that stores these variables with constructor and getters and setters (code attached). from recycler view the data comes

Now I want to add a click listener to update items on the list on click of item on Recycler view. This is all in one fragment and i dont want to make 2 API's for this task.

[{
    "id_grade": "grade 10",
    "subject_total_count": 14,
    "full_test_total": 10,
    "image_for_header": "https://raw.githubusercontent.com/hrshtpnt/testing/master/physicsLogo.jpg",
    "module_test_total": 21,
    "subjects_all": [
      {
        "subjectName": "Physics",
        "tcChapters": 10,
        "tcFullTest": 5,
        "tcMiniTest": 15,
        "subjectImage": "https://raw.githubusercontent.com/hrshtpnt/testing/master/physicsLogo.jpg"
      },
      {
        "subjectName": "Chemistry",
        "tcChapters": 10,
        "tcFullTest": 122,
        "tcMiniTest": 15,
        "subjectImage": "https://raw.githubusercontent.com/hrshtpnt/testing/master/chemistry.png"
      },
      {
        "subjectName": "Maths",
        "tcChapters": 10,
        "tcFullTest": 15,
        "tcMiniTest": 15,
        "subjectImage": "https://raw.githubusercontent.com/hrshtpnt/testing/master/maths.png"
      }
    ]
  }
]
public class Grade {
    private String id_grade;
    private Integer subject_total_count;
    private Integer module_test_total;
    private Integer full_test_total;
    private String image_for_header;
    private ArrayList<Subject> subjects;

    }

In grade class I created an Array list of type Subject and created a class Subject that can hold these details.

public class ExplorerFragment extends Fragment {

RecyclerView recyclerView;
RecyclerView.Adapter gradeAdaptor;
public RequestQueue queue;
ArrayList<Grade> grade = new ArrayList<Grade>();

String url = "hosting from my local server";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    queue = Volley.newRequestQueue(Objects.requireNonNull(getActivity()).getApplicationContext());
}

@Nullable
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.explorerfrag, container, false);
    ListView listView = (ListView)view.findViewById(R.id.subject_list);
    CustomAdaptor customAdaptor = new CustomAdaptor();
    listView.setAdapter(customAdaptor);
    recyclerView = view.findViewById(R.id.list);
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(Objects.requireNonNull(getActivity()).getApplicationContext(), LinearLayoutManager.HORIZONTAL, false);
    recyclerView.setLayoutManager(layoutManager);

    StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    String id_grade;
                    Integer subject_total_count;
                    String image_for_header;
                    Integer full_test_total;
                    Integer module_test_total;
                    JSONArray gradesArray;
                    JSONArray subjectArray;

                    try {
                        gradesArray = new JSONArray(response);
                        for (int i = 0; i < gradesArray.length(); i++) {
                            JSONObject gradesObj = gradesArray.getJSONObject(i);
                            ArrayList<Subject> arrayList = new ArrayList<>();
                            id_grade = gradesObj.getString("id_grade");
                            subject_total_count = gradesObj.getInt("subject_total_count");
                            image_for_header = gradesObj.getString("image_for_header");
                            full_test_total = gradesObj.getInt("full_test_total");
                            module_test_total = gradesObj.getInt("module_test_total");

                            subjectArray = gradesObj.getJSONArray("subjects_all");
                            for (int j = 0; j < subjectArray.length(); j++) {
                                JSONObject subjectObj = subjectArray.getJSONObject(j);
                                Subject subject = new Subject();
                                subject.setSubjectImage(subjectObj.getString("subjectImage"));
                                subject.setSubjectName(subjectObj.getString("subjectName"));
                                subject.setTcChapters(subjectObj.getInt("tcChapters"));
                                subject.setTcFullTest(subjectObj.getInt("tcFullTest"));
                                subject.setTcMiniTest(subjectObj.getInt("tcMiniTest"));
                                arrayList.add(subject);
                            }
                            grade.add(new Grade(id_grade, subject_total_count, module_test_total, full_test_total, image_for_header, arrayList));
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    gradeAdaptor = new GradeAdapter(getActivity(), grade);
                    recyclerView.setAdapter(gradeAdaptor);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(getActivity().getApplicationContext(), "This did not work", Toast.LENGTH_SHORT).show();
                }
            });
    queue.add(stringRequest);
    return view;
}
class CustomAdaptor extends BaseAdapter {

    @Override
    public int getCount() {
        ArrayList<Subject> subject;

        return 10;
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        convertView = getLayoutInflater().inflate(R.layout.vertical_subject_list, null);
        TextView tvSubject_name = (TextView) convertView.findViewById(R.id.tvSubject_name);
        ImageView img_subject = (ImageView) convertView.findViewById(R.id.img_subject);
        TextView tvChapter_count = (TextView) convertView.findViewById(R.id.tvChapter_count);
        TextView tvTestInfo = (TextView) convertView.findViewById(R.id.tvTestInfo);

        return convertView;
    }
}

}

GradeAdaptor class:>

public class GradeAdapter extends RecyclerView.Adapter<GradeAdapter.ViewHolder> {
private ArrayList<Grade> grade;
private Activity context;
private RequestOptions options;


public GradeAdapter(Activity context_v, ArrayList<Grade> list) {
    grade = list;
    context = context_v;
    options = new RequestOptions()
            .centerCrop()
            .placeholder(R.mipmap.ic_launcher_round)
            .error(R.mipmap.ic_launcher_round);

}


public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    ImageView ivGradeImage;
    TextView tvGradeName;
    TextView tvModuleTestCount;
    TextView tvFullTestCount;
    TextView tvSubjectsCount;

    public ViewHolder(final View itemView) {
        super(itemView);
        itemView.setOnClickListener(this);
        ivGradeImage = itemView.findViewById(R.id.ivGradeImage);
        tvGradeName = itemView.findViewById(R.id.tvGradeName);
        tvFullTestCount = itemView.findViewById(R.id.tvFullTestCount);
        tvModuleTestCount = itemView.findViewById(R.id.tvModuleTestCount);
        tvSubjectsCount = itemView.findViewById(R.id.tvSubjectsCount);
    }

    @Override
    public void onClick(View v) {
        Integer Test =  grade.indexOf((Grade)itemView.getTag());
        Toast.makeText(itemView.getContext(), "hello " + Test, Toast.LENGTH_SHORT).show();

    }
}
@NonNull
@Override
public GradeAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.horizontal_grade_list, viewGroup, false);
    return new ViewHolder(v);
}

@Override
public void onBindViewHolder(@NonNull GradeAdapter.ViewHolder viewHolder, final int position) {
    viewHolder.itemView.setTag(grade.get(position));
    viewHolder.tvGradeName.setText(grade.get(position).getId_grade());
    viewHolder.tvSubjectsCount.setText(String.format("%d", grade.get(position).getSubject_total_count()));
    viewHolder.tvModuleTestCount.setText(String.format("%d", grade.get(position).getModule_test_total()));
    viewHolder.tvFullTestCount.setText(String.format("%d", grade.get(position).getFull_test_total()));
    Glide.with(context).load(grade.get(position).getImage_for_header()).apply(options).into(viewHolder.ivGradeImage);
}

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

Comments