gpt4 book ai didi

android - 如何将变量从线程传递到外部环境?

转载 作者:太空狗 更新时间:2023-10-29 15:27:27 24 4
gpt4 key购买 nike

我在主 Activity 中嵌套了一个线程:

public class MainActivity extends Activity {

public void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);

new Thread(new Runnable(){
public void run() {
int myInt = 1;
// Code below works fine and shows me myInt
TextView textView = (TextView) findViewById(R.id.text_view);
textView.setText(myInt);
}
}).start();

// Code below doesn't work at all
TextView textView = (TextView) findViewById(R.id.text_view);
textView.setText(myInt);

}

我不确定这个结构是否正确。我应该如何将 myInt 变量传递给 MainActivity 以便它在线程外变得可识别和可操作?

最佳答案

在尝试设置线程外部(在主线程上)的 TextView 之前,您首先需要一个已设置整数的全局变量。它需要事先设置,因为您启动的新线程将简单地启动并移动到下一行代码,因此 myInt 尚未设置。

然后,至少在开始时,在主线程上为 TextView 使用预定的全局整数值。如果您想从您启动的线程中更改它,请在您的类中创建一个方法,如 setIntValue() ,它将从线程中传入整数并将全局变量设置为该值。如果您愿意,我可以稍后更新代码示例。

更新:示例代码

public class MainActivity extends Activity {

//your global int
int myInt

public void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);

new Thread(new Runnable(){
public void run() {
int myRunnableInt = 1;
// Code below works fine and shows me myInt
TextView textView = (TextView) findViewById(R.id.text_view);
textView.setText(String.valueOf(myRunnableInt));

//say you modified myRunnableInt and want the global int to reflect that...
setMyInt(myRunnableInt);
}
}).start();

//go ahead and initialize the global one here because you can't directly access your
myRunnableInt
myInt = 1;

TextView textView = (TextView) findViewById(R.id.text_view);
textView.setText(String.valueOf(myInt)); //now you will have a value here to use

//method to set the global int value
private void setMyInt(int value){
myInt = value;

//you could also reset the textview here with the new value if you'd like
TextView textView = (TextView) findViewById(R.id.text_view);
textView.setText(String.valueOf(myInt));
}
}

注意:如果您只希望能够重置 TextView ,而不是拥有一个全局的、可操作的变量,我建议将方法更改为只传入新的整数并设置 TextView ,而不是存储一个全局变量变量,像这样:

private void setTextView(int newInt){
TextView textView = (TextView) findViewById(R.id.text_view);
textView.setText(String.valueOf(newInt));
}

如果执行上述操作,请确保从线程内调用方法时,在 UI 线程上调用它,如下所示: runOnUiThread(new Runnable()){ 公共(public)无效运行(){ //更新界面元素 }

关于android - 如何将变量从线程传递到外部环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12388932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com