【问题标题】:Type Cannot make a static reference to the non-static method setVisibility(int) from the type View类型不能从类型 View 对非静态方法 setVisibility(int) 进行静态引用
【发布时间】:2012-09-06 22:23:34
【问题描述】:

我在 Eclipse 中不断收到以下错误:

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

我的代码是:

package com.example.testing;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {

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

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

public void onLoveButtonClicked(View view) {
    TextView haikuTextView = (TextView) findViewById(R.id.haikuTextView);
    TextView.setVisibility(View.VISIBLE); //error here
}
 }

我只是 java 的初学者,所以我不知道是什么导致了这个问题。我用谷歌搜索了这个错误,但没有得到任何帮助。

【问题讨论】:

    标签: java android


    【解决方案1】:

    你需要使用:

    haikuTextView.setVisibility(View.VISIBLE); 
    

    TextView 是类,haikuTextView 是你的变量。您无法更改整个班级的可见性。但是您可以更改变量的可见性。


    你写的时候:

    <TextView
        android:id="@+id/haikuTextView"
        ... />
    

    您创建了TextView 类的一个实例。您可以创建很多 TextView 类的实例,但是当您想在一个实例中更改某个特定的某些功能时,您必须指定要更改的 TextView。

    当您写TextView.setVisibility() 时,您尝试更改每个 TextView。现在TextView 类没有setVisibility() 方法来更改每个TextView,但它确实有setVisibilty() 来更改一个 实例。

    所以
    当您尝试使用TextView.setVisibility() 访问每个TextView 时,这是一个“静态引用”,但是,就像我说的,没有方法可以调用setVisibility() 每个 TextView。

    如果您使用haikuTextView.setVisibilty() 更改一个实例的可见性,这将起作用,因为这是“非静态方法”存在。

    【讨论】:

      【解决方案2】:

      扩展山姆的回答:

      TextView 是一个类;它也是 View 类的子类。当你引用一个类的静态成员时,你执行“classname.method(...)”或“classname.field”;当您说“TextView.setVisibility”时,您正在对“View”类中的方法“setVisibility”进行“静态引用”,该方法由 TextView 类继承。因此,错误消息:无法从类型 View 对非静态方法 setVisibility(int) 进行静态引用。因为 setVisibility 方法不是静态方法;这是一个普通的方法。

      必须相对于类的特定实例来引用普通方法。由于 haikuTextView 是 TextView 的一个实例;你可以说:

      haikuTextView.setVisibility(View.VISIBLE);
      

      清楚吗?

      【讨论】:

      • 是的,谢谢 :) 我正在关注一本书,这本书有 textView。我以为是错字。谢谢你们! :)
      【解决方案3】:

      应该是:

      textView.setVisibility(View.VISIBLE);//A small t instead of a capital T.
      

      祝你好运

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-15
        • 2015-08-18
        • 1970-01-01
        • 1970-01-01
        • 2012-07-14
        • 1970-01-01
        相关资源
        最近更新 更多