2014-05-15 13 views
1

我上的代碼行收到以下錯誤的靜態引用非靜態方法findViewById(INT):不能使從類型查看

不能使靜態參考非靜態方法從類型視圖

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

另外上的代碼

構造ArrayAdapter行以下錯誤findViewById(INT)(ListViewFragment,整型,字符串[])是未定義

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

} 
} 

回答

4

你不應該使用視圖。相反,使用rootView。

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

更新

你的類擴展片段類,而不是一個Activity類。因此,當您使用這個時,它會導致您提到的第二個錯誤。

您需要將活動作爲參數提供給arrayadapter構造函數;就像拉古南丹所說的那樣。

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

更新2

這可能是幫助他人誰得到類似的錯誤。除了查看類引用之外,您無法從其他任何方面獲益。

這裏,in the document,它說第一個參數必須是一個上下文。您的方式不包含在構造函數的任何重載版本中。這就是爲什麼你得到未定義的構造函數錯誤。

+0

由於它的工作, 什麼關於第二個錯誤? –

3

嘗試這種方式

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

,而不是

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

SpinnerrootView 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); 
+0

感謝它的工作, 第二個錯誤呢? –

+0

@YogeshOjha使用'getActivity()'而不是'this'。 'this'不是有效的上下文 – Raghunandan

+0

@YogeshOjha查看更新。 –

2
從已經暗示答案

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

由於錯誤

除了說

構造ArrayAdapter(ListViewFragment,整型,字符串[])是 未定義

thisListViewFragment延伸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

要製作

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

一個refrence必須訪問ELL像下面這樣引用的部件。

mspinner = (Spinner) rootView .findViewById(R.id.spinnervdc); 
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); 
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; 
} 
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);

希望這將工作