簡體   English   中英

無法從類型View中靜態引用非靜態方法findViewById(int)

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

我在代碼行中收到以下錯誤:

無法從類型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) {

}
}

您不應該使用View。 而是使用rootView。

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

更新資料

您的類擴展了Fragment類,而不是Activity類。 因此,當您使用this時 ,它將導致您提到的第二個錯誤。

您需要將活動作為參數提供給arrayadapter構造函數; 正如Raghunandan所建議的那樣。

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

更新2

這可能會對其他遇到類似錯誤的人有所幫助。 除了查看類引用之外,您不能從其他任何事情中受益更多。

這里, 在文檔中,它說第一個參數必須是一個Context。 您的方式未包含在構造函數的任何重載版本中。 這就是為什么您會收到未定義的構造函數錯誤的原因。

嘗試這種方式

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

除了已經建議的答案

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

你正在反感

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

您必須像下面一樣訪問此參考文獻上的小部件。

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

嘗試這個,

@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()不是靜態方法,因此您不能像這樣嘗試調用它
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);

希望這會起作用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM