Java 从片段更新UI
我有一个片段,它通过带有onActivityResult(…)的intent从DialogFragment获取数据 我正在尝试更新片段的UI,但runOnUiThread不起作用Java 从片段更新UI,java,android,multithreading,android-fragments,Java,Android,Multithreading,Android Fragments,我有一个片段,它通过带有onActivityResult(…)的intent从DialogFragment获取数据 我正在尝试更新片段的UI,但runOnUiThread不起作用 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); ArrayList&
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
ArrayList<Farm> farms = data.getParcelableArrayListExtra("farms_list");
float totalArea = 0;
for(Farm farm : farms) {
if (farm.isSelected()) {
Log.d("farm", farm.getName());
totalArea += farm.getArea();
}
}
final float finalTotalArea = totalArea;
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
area.setText(String.valueOf(finalTotalArea));
}
});
}
正在主线程上调用onActivityResult。更多由于某些原因,无法使用此方法编辑视图(可能未创建或绘制)。 您可以使用的一个技巧是设置var boolean updateTextView=false;
在onActivityResult上,将其设置为true,保存您获得的数据,然后在Resume上检查updateTextView,如果为true,则将数据设置为您的TextView。onActivityResult在主线程上被调用。更多由于某些原因,无法使用此方法编辑视图(可能未创建或绘制)。 您可以使用的一个技巧是设置var boolean updateTextView=false;
在onActivityResult上,将其设置为true,保存您获得的数据,然后在Resume上检查updateTextView,如果为true,则将数据设置为您的TextView。如何尝试将其包装到您随后启动的适当线程中
new Thread() {
public void run() {
try {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
area.setText(String.valueOf(finalTotalArea));
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
试着用一个合适的线程来包装它,然后再启动怎么样
new Thread() {
public void run() {
try {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
area.setText(String.valueOf(finalTotalArea));
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
似乎您的
活动
在某个地方丢失了您的片段
,我在本例中所做的是向我的回调
添加一个方法,可能是重新附加对话框(DialogFragment DialogFragment)
,并使用重新附加对话框(this)
在DialogFragment的恢复中调用它
在您的活动中,您可以这样做:
@Override
public void reattachFragment(DialogFragment dialogFragment) {
this.dialogFragment = dialogFragment;
}
或在片段中:
@Override
public void reattachFragment(DialogFragment dialogFragment) {
getActivity().setDialog(dialogFragment);
}
似乎您的
活动
在某个地方丢失了您的片段
,我在本例中所做的是向我的回调
添加一个方法,可能是重新附加对话框(DialogFragment DialogFragment)
,并使用重新附加对话框(this)
在DialogFragment的恢复中调用它
在您的活动中,您可以这样做:
@Override
public void reattachFragment(DialogFragment dialogFragment) {
this.dialogFragment = dialogFragment;
}
或在片段中:
@Override
public void reattachFragment(DialogFragment dialogFragment) {
getActivity().setDialog(dialogFragment);
}
您应该使用
getActivity.runOnUiThread(new Runnable(){
.getActivity()返回null当您说runOnUiThread()不工作时,您的意思是它会导致错误还是它不处理任何内容?它不会呈现任何内容可能重复的内容您应该使用getActivity.runOnUiThread(new Runnable(){
.getActivity())返回Null当您说runOnUiThread()不工作时,您的意思是它导致错误还是它不处理任何内容?它不呈现任何可能重复的内容