我在代码行中收到以下错误:
无法从类型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) {
}
}
答案 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 [])是 未定义
this
指ListViewFragment
,Fragment
延伸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);
希望这会起作用