簡體   English   中英

如何從 MainActivity 獲取價值?

[英]How to get value from MainActivity?

所以我有這個主要活動:

import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
private volatile boolean stopTask = false;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.layout);
   }
   
   public boolean getStopTask() {
      return stopTask;
   }
   
   public void startMyTask(View view) {
      stopTask = false;
      TextView textView = findViewById(R.id.text_view);
      MyTask myTask = new MyTask(10, textView);

      new Thread(myTask).start();
   }
   
   public void stopMyTask(View view) {
      stopTask = true;
   }
}

有人告訴我,我可以通過獲取MainActivity的實例並直接訪問該函數來從MyTask訪問getStopTask()

我試過了,但出現錯誤: “無法在尚未調用 Looper.prepare() 的線程 Thread[Thread-6,5,main] 內創建處理程序”

這是我的任務:

import android.widget.TextView;

public class MyTask implements Runnable {
    int seconds;
    TextView textView;

    MyTask(int seconds, TextView textView) {
        this.seconds = seconds;
        this.textView = textView;
    }

    @Override
    public void run() {

    MainActivity mainActivity = new MainActivity();

    for (int x = 0; x < seconds; x++) {
        boolean stopTask = mainActivity.getStopTask();

        if (stopTask)
           break;

        textView.setText(String.format("x: %s", x));

        try {
           Thread.sleep(1000);
        } catch (InterruptedException e) {
           e.printStackTrace();
        }    
      }
    }
}

應用程序命中后立即發生錯誤:

MainActivity mainActivity = new MainActivity();

如何從 MyTask 獲取stopTask的值?

我會將 boolean stopTask為 static 並以這種方式使用它而不是getStopTask()

主活動.java:

public class MainActivity extends AppCompatActivity {
public static boolean stopTask = false;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.layout);
   }
   
   /*
   
   public boolean getStopTask() {
      return stopTask;
   }*/
   
   public void startMyTask(View view) {
      stopTask = false;
      TextView textView = findViewById(R.id.text_view);
      MyTask myTask = new MyTask(10, textView);

      new Thread(myTask).start();
   }
   
   public void stopMyTask(View view) {
      stopTask = true;
   }
}

我的任務.java:

public class MyTask implements Runnable {
    int seconds;
    TextView textView;

    MyTask(int seconds, TextView textView) {
        this.seconds = seconds;
        this.textView = textView;
    }

    @Override
    public void run() {

    //MainActivity mainActivity = new MainActivity();

    for (int x = 0; x < seconds; x++) {
        boolean stopTask = MainActivity.stopTask;

        if (stopTask)
           break;

        textView.setText(String.format("x: %s", x));

        try {
           Thread.sleep(1000);
        } catch (InterruptedException e) {
           e.printStackTrace();
        }    
      }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM