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 が null に設定されました。テキストを設定できません。

だから私はテキストビューを静的ではないものとして取得しようとします。しかし、2番目の問題があります。私がそれを行うとき、テキストビューにアクセスするには、新しい MainActivity() を取得する必要があります。これはうまく機能しませんでした。複雑です。

静的メソッドからテキストビューを取得するにはどうすればよいですか?

4

1 に答える 1

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は良くないようです。

を使用して実行できるtextviewfromを更新する必要があるもう 1 つのことUI threadrunOnUiThread

instance.runOnUiThread(new Runnable() {

        public void run() {
            // update your textview             
        }
    });
于 2013-02-09T10:27:04.623 に答える