Question

I am getting the following error on the line of code:

Cannot make a static reference to the non-static method findViewById(int) from the type View

mspinner        = (Spinner) View.findViewById(R.id.spinnervdc);

Also the following error on the line of code

The constructor ArrayAdapter(ListViewFragment, int, String[]) is undefined

adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,name);

And my MainActivity is

package com.yogeshojha.nagariksahayata;
import java.util.ArrayList;
import java.util.List;

import com.yogeshojha.nagariksahayata.R;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.app.Activity;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
public class ListViewFragment extends Fragment implements OnItemSelectedListener{
public ListViewFragment(){}
Spinner mspinner; //declare spinner globally
ArrayAdapter<String> adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_listview, container, false);

mspinner        = (Spinner) View.findViewById(R.id.spinnervdc);
//set adapter for spinner here
String [] name = {"A","B","C"};
adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,name);
// you can use getActivity() or this 

mspinner.setAdapter(adapter);

return rootView;
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
    long id) {

//do something when particular item is selected from spinner

}

@Override
public void onNothingSelected(AdapterView<?> arg0) {

}
}
Was it helpful?

Solution

You shouldn't use View. Instead, use rootView.

mSpinner = (Spinner) rootView.findViewById(R.id.spinnervdc);

Update

Your class extends Fragment class, not an Activity class. Therefore when you use this, it causes the second error you mentioned.

You need to give the activity as parameter to the arrayadapter constructor; just as Raghunandan suggests.

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

Update 2

This might be helpful to others who get similar errors. You cannot benefit more from anything else than looking at the class references.

Here, in the document, it says that the first parameter had to be a Context. Your way is not included in any overloaded versions of the constructor. That is why you get the undefined constructor error.

OTHER TIPS

try this way

mspinner = (Spinner) rootView.findViewById(R.id.spinnervdc);

instead of

mspinner = (Spinner) View.findViewById(R.id.spinnervdc);

Your Spinner is coming from the rootView layout, so you need to initialize it using that particular layout.

and also you should change this

adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,name);

with

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

Apart from the already suggest answer

mspinner= (Spinner)rootView.findViewById(R.id.spinnervdc);

As the error says

The constructor ArrayAdapter(ListViewFragment, int, String[]) is undefined

this refers to ListViewFragment which extends Fragment. You need a valid context. So use getActivity().

This

adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,name);

Should be

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

you are making a refrence of

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

you have to access ell the widgets on this reference like below.

mspinner = (Spinner) rootView .findViewById(R.id.spinnervdc);

You should change:

adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,name);

to

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

try this,

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

mspinner        = (Spinner) rootView.findViewById(R.id.spinnervdc);
//set adapter for spinner here
String [] name = {"A","B","C"};
adapter=new ArrayAdapter<String>(getActivity(),android.R.layout.simple_spinner_item,name);


mspinner.setAdapter(adapter);

return rootView;
}

findViewByID() is not an static method so you cannot call it like this try this
mSpinner = (Spinner) rootView.findViewById(R.id.spinnervdc);

and for this adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,name); try this adapter=new ArrayAdapter<String>(getActivity(),android.R.layout.simple_spinner_item,name);

Hope this will work

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top