gpt4 book ai didi

java - Android - DialogFragment 从 Fragment 中显示。 DialogFragment 关闭时如何显示 Fragment 中的 Toast?

转载 作者:行者123 更新时间:2023-12-01 18:48:04 25 4
gpt4 key购买 nike

正如问题中提到的..

我有一个 fragment ,我从中创建并显示一个 DialogFragment,并将 targetFragment 设置为此当前 fragment 。

DialogFragment_Progress fragmentProgressBar = new DialogFragment_Progress();        
fragmentProgressBar.setTargetFragment(this, 0);
fragmentProgressBar.show(getFragmentManager(), null);

我做了一些进度条更新

// Thread that controls progress bar
final Thread progressThread = new Thread()
{
@Override
public void run()
{
active = true;
int cumulativetime = 0;

try
{
while (active && cumulativetime < TIME_TOTAL)
{
sleep(TIME_INTERVAL);

if (active)
{
cumulativetime += TIME_INTERVAL;

updateProgress(cumulativetime);
}
}
}
catch (InterruptedException e)
{

}
finally
{
onContinue();
}
}
};

当进度条完成时,我尝试调用目标 Fragment 中的方法来显示 Toast。 onContinue() 代码和 targetFragment 中调用的方法如下所示。

// Perform final operations
public void onContinue()
{
Fragment_Activate_Program_Specific targetFragment = (Fragment_Activate_Program_Specific) getTargetFragment();

targetFragment.operationComplete();

dismiss();
}

操作完成..

// Operation complete
public void operationComplete()
{
Toast.makeText(getActivity(), "Herp", Toast.LENGTH_SHORT).show();

Log.i("Hello: ", "Got here!");
}

当我不尝试Toast时,一切都很好,日志已收到。之前在不涉及 UI 的情况下,此方法已对我有用过几次。

问题:当在 targetFragment() 中调用 operationComplete() 时,出现以下异常..

java.lang.RuntimeException:无法在未调用 Looper.prepare() 的线程内创建处理程序

相关堆栈跟踪..

05-31 12:21:53.024: W/dalvikvm(28494): threadid=13: thread exiting with uncaught exception (group=0x40cc9930)
05-31 12:21:53.034: E/AndroidRuntime(28494): FATAL EXCEPTION: Thread-14251
05-31 12:21:53.034: E/AndroidRuntime(28494): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
05-31 12:21:53.034: E/AndroidRuntime(28494): at android.os.Handler.<init>(Handler.java:197)
05-31 12:21:53.034: E/AndroidRuntime(28494): at android.os.Handler.<init>(Handler.java:111)
05-31 12:21:53.034: E/AndroidRuntime(28494): at android.widget.Toast$TN.<init>(Toast.java:324)
05-31 12:21:53.034: E/AndroidRuntime(28494): at android.widget.Toast.<init>(Toast.java:91)
05-31 12:21:53.034: E/AndroidRuntime(28494): at android.widget.Toast.makeText(Toast.java:238)
05-31 12:21:53.034: E/AndroidRuntime(28494): at com.mypackage.Activity_Activate_Program.activateOperationComplete(Activity_Activate_Program.java:90)

我尝试使用父 Activity 而不是调用 fragment 来托管 operationComplete() 方法,但出现了相同的错误。

有什么想法吗?

最佳答案

应该从 UI 线程调用 Toast。

试试这个。

public void operationComplete()
{
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getActivity(), "Herp", Toast.LENGTH_SHORT).show();
}
});


Log.i("Hello: ", "Got here!");
}

关于java - Android - DialogFragment 从 Fragment 中显示。 DialogFragment 关闭时如何显示 Fragment 中的 Toast?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16856226/

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