无法从类型View对静态方法findViewById(int)进行静态引用

时间:2014-05-15 12:30:23

标签: java android android-fragments spinner android-spinner

我在代码行中收到以下错误:

无法从类型View

中对非静态方法findViewById(int)进行静态引用
mspinner        = (Spinner) View.findViewById(R.id.spinnervdc);

代码行上还出现以下错误

构造函数ArrayAdapter(ListViewFragment,int,String [])未定义

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

我的MainActivity是

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) {

}
}

7 个答案:

答案 0 :(得分:4)

你不应该使用View。相反,请使用rootView。

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

<强>更新

您的类扩展了Fragment类,而不是Activity类。因此,当您使用时,会导致您提到的第二个错误。

您需要将activity作为参数提供给arrayadapter构造函数;正如Raghunandan所暗示的那样。

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

更新2

这对于遇到类似错误的其他人可能会有所帮助。除了查看类引用之外,您无法从其他任何方面获益。

在这里,in the document,它表示第一个参数必须是一个Context。您的方式不包含在构造函数的任何重载版本中。这就是为什么你得到 undefined constructor 错误。

答案 1 :(得分:3)

试试这种方式

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

而不是

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

您的Spinner来自rootView layout,因此您需要使用该特定布局对其进行初始化。

你也应该改变这个

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

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

答案 2 :(得分:2)

除了已经建议的答案

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

正如错误所说

  

构造函数ArrayAdapter(ListViewFragment,int,String [])是   未定义

thisListViewFragmentFragment延伸getActivity()。您需要有效的上下文。因此,请使用adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,name);

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

应该是

{{1}}

答案 3 :(得分:1)

你正在引用

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

您必须访问此引用上的小部件,如下所示。

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

答案 4 :(得分:1)

你应该改变:

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

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

答案 5 :(得分:1)

试试这个,

@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;
}

答案 6 :(得分:1)

findViewByID()不是静态方法,所以你不能这样调用它试试这个 mSpinner = (Spinner) rootView.findViewById(R.id.spinnervdc);

并为此adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,name); 试试这个adapter=new ArrayAdapter<String>(getActivity(),android.R.layout.simple_spinner_item,name);

希望这会起作用