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
Post a Comment