I am storing data from my firebase Realtime database into an Arraylist and displaying through recyclerAdapter. I Want to be able to open new Activity and pass information from this activity to the next but to do so i need to get the selected item or the item that is being clicked
Code:
protected void onStart() {
super.onStart();
if (ref != null) {
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists()) {
list = new ArrayList<>();
for (DataSnapshot s : snapshot.getChildren()) {
list.add(s.getValue(jobclass.class));
}
myAdapter ma = new myAdapter(list);
result.setAdapter(ma);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(showjobs.this, error.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
if(sv!=null)
{
sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
search(s);
return true;
}
});
}
}
private void search(String str)
{
ArrayList<jobclass> mylist=new ArrayList<>();
for(jobclass obj:list)
{
if(obj.getJobTitle().toLowerCase().contains(str.toLowerCase()))
{
mylist.add(obj);
}
}
myAdapter myadaptor=new myAdapter(mylist);
result.setAdapter(myadaptor);
}
This is my custom adapter and viewholder class:
public class myAdapter extends RecyclerView.Adapter<myAdapter.jobviewholder> {
ArrayList<jobclass> list;
public myAdapter(ArrayList<jobclass> list)
{
this.list=list;
}
@NonNull
@Override
public jobviewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.listlayout,parent,false);
return new jobviewholder(v);
}
@Override
public void onBindViewHolder(@NonNull jobviewholder holder, int position) {
holder.setDetails(list.get(position).getJobTitle(),list.get(position).getCompany(),list.get(position).getPay(),list.get(position).getAge(),list.get(position).getExperience(),list.get(position).getType());
}
@Override
public int getItemCount() {
return list.size() ;
}
class jobviewholder extends RecyclerView.ViewHolder{
TextView jobtitle;
TextView companyname;
TextView payment;
TextView age;
TextView exprequired;
TextView jobtype;
View v;
public jobviewholder(View itemView){
super(itemView);
jobtitle=itemView.findViewById(R.id.jname);
companyname=itemView.findViewById(R.id.cname);
payment=itemView.findViewById(R.id.sal);
age=itemView.findViewById(R.id.agereq);
exprequired=itemView.findViewById(R.id.reqex);
jobtype=itemView.findViewById(R.id.type);
}
public void setDetails(String jobn, String companyn, String pay, String Ag, String xreq, String jtyp){
jobtitle.setText(jobn);
companyname.setText(companyn);
payment.setText(pay);
age.setText(Ag);
exprequired.setText(xreq);
jobtype.setText(jtyp);
}
}
}
Try catch to try to catch the reason of my crash
try {
ma = new myAdapter(list, new myAdapter.OnItemClickListener() {
@Override
public void OnItemClick(int position) {
Toast.makeText(showjobs.this, position, Toast.LENGTH_SHORT).show();
}
});
result.setAdapter(ma);
}
catch(Exception e)
{
Toast.makeText(showjobs.this, e.getMessage(), Toast.LENGTH_LONG).show();
}
_______________________