2

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

类型不能从类型 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的初学者,所以我不知道是什么导致了这个问题。我已经用谷歌搜索了这个错误,但我没有得到任何对我有帮助的东西。

4

3 回答 3

0

你需要使用:

haikuTextView.setVisibility(View.VISIBLE); 

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


当你写道:

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

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

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

因此,
当您尝试使用 this 访问 everyTextView时,TextView.setVisibility()这是一个“静态引用”,但是,就像我说的那样,没有方法可以调用setVisibility() every TextView

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

于 2012-09-06T22:24:20.327 回答
0

扩展山姆的答案:

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

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

haikuTextView.setVisibility(View.VISIBLE);

明白了吗?

于 2012-09-06T22:36:09.963 回答
0

它应该是:

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

祝你好运

于 2013-06-19T12:05:41.570 回答