从静态类访问NOT静态字段

时间:2013-02-09 10:21:51

标签: android android-activity

public class MainActivity extends Activity {

   TextView textview;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
    setContentView(R.layout.activity_main);

      textview = (TextView)findViewById(R.id.textView6);
      //other method,startservice()and so on.

      //and there is BroadcastReceiver to receive a flag from service.
      public static class Receiver extends BroadcastReceiver{

      @Override
          public void onReceive(Context context, Intent intents) {
          intents.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          textview.setText("set");

这是我的代码。 我想要的是textview.setText()onReceive。

我的第一次尝试,textview是静态的。 但是静态变量似乎在另一个方法运行期间被杀死。 textview设置为null,cant settext。

所以我尝试将textview视为非静态。 但还有第二个问题。 当我这样做时,我必须得到新的MainActivity()来访问textview。 这并没有奏效。复杂。

如何从静态方法获取textview。

1 个答案:

答案 0 :(得分:0)

您无法在静态方法中访问非静态变量/方法,因为静态方法存在,无论是否存在您的类的实例或

您可以维护MainActivity的静态实例(在构造函数或onCreate中初始化它)并使用它来访问textview

例如

public class MainActivity extends Activity {
    private static MainActivity instance;

    protected void onCreate(Bundle savedInstanceState) {
      instance = this;
    }

  public void onReceive(Context context, Intent intents) {
     instance.textview.setText("set");     
}

我不知道你在这里想要实现什么,或者什么时候调用onReceive,但是BroadcastReceiver的静态类似乎并不好。

您需要使用textview来更新UI thread runOnUiThread所需的另一件事

instance.runOnUiThread(new Runnable() {

        public void run() {
            // update your textview             
        }
    });