No Name
No Name

Reputation: 470

A Spinner inside a Fragment

I'm creating a simple android game application but I'm facing some issue in spinner inside my fragment. I try some solution but still my app crash. Can someone help me? Massive thankyou.

 public class SlotMachineFragmentOne extends Fragment {

 Spinner dropdown;

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

    View rootView = inflater.inflate(R.layout.activity_slotmachine_fragment_one, container, false);

    initspinnerfooter();
    dropdown = rootView.findViewById(R.id.spinner);

    return rootView;
}

private void initspinnerfooter() {
    String[] items = new String[]{
            "Choose apple", "Choose boy", " Choose cat", "Choose dog", 
    };

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, items);
    dropdown.setAdapter(adapter);
    dropdown.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            Log.v("item", (String) parent.getItemAtPosition(position));
            ((TextView) parent.getChildAt(0)).setTextColor(Color.WHITE);
        }

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

Upvotes: 0

Views: 8263

Answers (2)

Vishal
Vishal

Reputation: 551

you are accessing dropdown object before initializing it that's why it is throwing NullPointerException

first you initialize then use it

public class SlotMachineFragmentOne extends Fragment {

 Spinner dropdown;

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

    View rootView = inflater.inflate(R.layout.activity_slotmachine_fragment_one, container, false);


    dropdown = rootView.findViewById(R.id.spinner);
    initspinnerfooter();

    return rootView;
}

private void initspinnerfooter() {
    String[] items = new String[]{
            "Choose apple", "Choose boy", " Choose cat", "Choose dog", 
    };

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, items);
    dropdown.setAdapter(adapter);
    dropdown.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            Log.v("item", (String) parent.getItemAtPosition(position));
            ((TextView) parent.getChildAt(0)).setTextColor(Color.WHITE);
        }

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

Upvotes: 1

prashant17
prashant17

Reputation: 1550

Call initspinnerfooter(); after dropdown = rootView.findViewById(R.id.spinner);

Like this:

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

    View rootView = inflater.inflate(R.layout.activity_slotmachine_fragment_one, container, false);

    dropdown = rootView.findViewById(R.id.spinner);
    initspinnerfooter();

    return rootView;
}

Upvotes: 1

Related Questions