MatiCepe
MatiCepe

Reputation: 23

Android Spinner Adapter null exception on setAdapter

I am pretty new on Android developing and I am facing some trouble with the Spinners. My activity has 2 Spinners and I'm trying to populate the second after the selection of the first one.

The populating method for the first Spinner works fine, and the returning array for the second too, but when I do spin2.setAdapter(adapter), throws a NullPointerException.

I put a Toast.show() to see if the method that gives me the values on the second spinner works and it does. Just when I remove the setAdapter(), the app doesn't crash. But also, the second spinner is empty.

I put the code for my Fragment to see what am I doing wrong:

public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_info_de_lineas,
                container, false);
        return rootView;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState){
        super.onActivityCreated(savedInstanceState);
        Spinner spin = (Spinner)getActivity().findViewById(R.id.spEmpresa);
        AccesoADatos db = new AccesoADatos(getActivity().getApplicationContext());
        SQLiteDatabase database = db.getWritableDatabase();

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        Cursor cursor = db.getAllEmpresas();
        if(cursor.moveToFirst()){
             do{
                adapter.add(cursor.getString(1));

             } while(cursor.moveToNext());
        }

        spin.setAdapter(adapter);

        Spinner spin2 = (Spinner)getActivity().findViewById(R.id.spEmpresa);
        spin2.setOnItemSelectedListener(new OnItemSelectedListener(){
            @Override
            public void onItemSelected(AdapterView<?> parent, View v, int pos,
                    long id) {
                Spinner spinLineas = (Spinner)parent.findViewById(R.id.spLinea);
                Spinner spinEmpresa = (Spinner)parent.findViewById(R.id.spEmpresa);
                ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(parent.getContext(),android.R.layout.simple_spinner_item);
               // 
                adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                int posicion = spinEmpresa.getSelectedItemPosition();
                int idpos =  (int) spinEmpresa.getItemIdAtPosition(posicion);
                AccesoADatos db = new AccesoADatos(parent.getContext());
                SQLiteDatabase database = db.getWritableDatabase();
                Cursor cursor2 = db.getAllLineas(idpos);


                if(cursor2.moveToFirst()){
                     do{
                        adapter2.add(cursor2.getString(1));
                        Toast.makeText(parent.getContext(), "Linea "+ cursor2.getString(1), Toast.LENGTH_LONG).show();
                     } while(cursor2.moveToNext());
                }
               spinLineas.setAdapter(adapter2);
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });
    }
}

Upvotes: 0

Views: 780

Answers (1)

Zoran
Zoran

Reputation: 1494

Replace:

Spinner spin = (Spinner)getActivity().findViewById(R.id.spEmpresa);

with:

Spinner spin = (Spinner)getView().findViewById(R.id.spEmpresa);

Also for spin2...

Upvotes: 1

Related Questions