非静态方法<t> findViewById(int)不能从静态上下文中引用

时间:2018-12-15 16:14:55

标签: java android class findviewbyid

我的第一个应用程序单独运行正常,但是现在我试图在教程之后添加选项卡,但遇到了麻烦。 我一直在搜索,许多用户遇到了同样的问题,我尝试了这些解决方案,但仍然无法正常工作。

我的应用

package es.ea1ddo.antenacubica;

import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        frecuencia = findViewById(R.id.frecuencia);
        cal3el = (Button) findViewById(R.id.calcular3);

现在这是我要复制以前的应用的地方

package es.ea1ddo.calculadoraantenascubicas;

public class TabFragment2 extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        View v= inflater.inflate(R.layout.tab_fragment_2, container, false);

        frecuencia = EditText.findViewById(R.id.frecuencia);
        cal3el = (Button) getView().findViewById(R.id.calcular3);

我一直在搜索,尝试了许多示例和不同的方式,但是我陷入了困境。 您可以看到我添加了getView()。在每个findViewById之前,但我仍然遇到相同的错误:

  

非静态方法findViewById(int)不能从T为类型变量的静态上下文中引用:   T扩展了在方法findViewById(int)中声明的View

有什么建议吗? 谢谢

3 个答案:

答案 0 :(得分:1)

替换

frecuencia = EditText.findViewById(R.id.frecuencia);
cal3el = (Button) getView().findViewById(R.id.calcular3);

使用

recuencia = (EditText) v.findViewById(R.id.frecuencia);
cal3el = (Button) v.findViewById(R.id.calcular3);

如果不起作用,请在您的问题中添加完整的xml代码

答案 1 :(得分:1)

在您的片段代码中,您有两个问题。

第一个,正如其他人指出的那样,View.findViewById()是一种非静态方法,因此您将像myView.findViewById()而不是EditText.findViewById()那样调用它。

第二个涉及片段的getView()方法的工作方式。此方法仅在 返回后才有效。onCreateView()返回getView()返回的值。这意味着您无法从onCreateView()内部呼叫getView();它将始终返回onCreateView()

放在一起,您的代码应如下所示:

null

答案 2 :(得分:0)

替换

EditText.findViewById

使用

(ExitText) getView().findViewById

但是,这将导致NullPointerException。

您需要将所有使用getView()的代码移至onViewCreated()或引用v