2013-02-09 230 views
0
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被设置为空,不能设置settext。

所以我尝试让textview不是静态的。 但还有第二个问题。 当我这样做,我必须得到新的MainActivity()访问textview。 这没有奏效well.complicated。

如何从静态方法获取textview。

回答

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

我不知道WH在你试图在这里实现或者当这个onReceive被调用时,但是对于BroadcastReceiver而言静态类似乎并不好。

另一件事,你将需要更新textviewUI thread您可以使用runOnUiThread

instance.runOnUiThread(new Runnable() { 

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

非常感谢呢!我知道有静态广播不好。但是,当onReceive被调用时,它需要是静态的。我认为有广播接收者类作为其他编译文件,那么设置文本就要复杂一些。如果你有时间,请教我如何。 – user2027811 2013-02-09 11:39:49

+0

为什么'BroadcastReceiver'需要是静态的?一般情况不应该如此 – iTech 2013-02-09 20:40:55