Search code examples
androidgoogle-cloud-firestoreandroid-spinner

Firestore Spinner error passing list after retrieving data


I'm trying to populate a spinner but for some reason I'm getting an error when trying to pass through my list of objects. Can some take a look please:

code:

public class AddFacultyFragment extends Fragment {

@BindView(R.id.spinner_search_UniFac)
Spinner spinner_search_UniFac;
ArrayList<University> list = new ArrayList<>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_add_faculty,
            container,
            false);
    ButterKnife.bind(this, view);
    FirebaseFirestore db = FirebaseFirestore.getInstance();
    CollectionReference docRef = db.collection("university");
    docRef.get().addOnCompleteListener((OnCompleteListener<QuerySnapshot>) task -> {
        if (task.isSuccessful()) {
            for(DocumentSnapshot a : task.getResult()){
                University u = new University();
                u.setID(a.getId());
                u.setDesc(a.get("Desc").toString());
                list.add(u);
            }
        }
    });
    ArrayAdapter<University> spinnerArrayAdapter = new ArrayAdapter<University>
            (this, android.R.layout.simple_spinner_item,
                    list);
    spinnerArrayAdapter.setDropDownViewResource(android.R.layout
            .simple_spinner_dropdown_item);
    spinner_search_UniFac.setAdapter(spinnerArrayAdapter);
    return view;
}

public AddFacultyFragment() {
    // Required empty public constructor
}

}

Thank you in advance. This is the error

error: no suitable constructor found for ArrayAdapter(AddFacultyFragment,int,List) constructor ArrayAdapter.ArrayAdapter(Context,int,int) is not applicable (argument mismatch; AddFacultyFragment cannot be converted to Context) constructor ArrayAdapter.ArrayAdapter(Context,int,String[]) is not applicable (argument mismatch; AddFacultyFragment cannot be converted to Context) constructor ArrayAdapter.ArrayAdapter(Context,int,List) is not applicable (argument mismatch; AddFacultyFragment cannot be converted to Context)


Solution

  • I think all you missing is the correct context. You cannot use this on a fragment, you have to use getContext() then it should work. Like this:

    public class AddFacultyFragment extends Fragment {

    @BindView(R.id.spinner_search_UniFac)
    Spinner spinner_search_UniFac;
    ArrayList<University> list = new ArrayList<>();
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_add_faculty,
                container,
                false);
        ButterKnife.bind(this, view);
        FirebaseFirestore db = FirebaseFirestore.getInstance();
        CollectionReference docRef = db.collection("university");
        docRef.get().addOnCompleteListener((OnCompleteListener<QuerySnapshot>) task -> {
            if (task.isSuccessful()) {
                for(DocumentSnapshot a : task.getResult()){
                    University u = new University();
                    u.setID(a.getId());
                    u.setDesc(a.get("Desc").toString());
                    list.add(u);
                }
            }
        });
        ArrayAdapter<University> spinnerArrayAdapter = new ArrayAdapter<University>
                (getContext(), android.R.layout.simple_spinner_item,
                        list);
        spinnerArrayAdapter.setDropDownViewResource(android.R.layout
                .simple_spinner_dropdown_item);
        spinner_search_UniFac.setAdapter(spinnerArrayAdapter);
        return view;
    }
    
    public AddFacultyFragment() {
        // Required empty public constructor
    }
    
    }