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。
答案 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
所需的另一件事1>
instance.runOnUiThread(new Runnable() {
public void run() {
// update your textview
}
});