DialogFragment 和 ProgressBar 在任务更新时更新
Posted
技术标签:
【中文标题】DialogFragment 和 ProgressBar 在任务更新时更新【英文标题】:DialogFragment with ProgressBar to update when task updates 【发布时间】:2016-03-08 16:09:50 【问题描述】:我有一个 AsyncTask 可以将进度发布到主要活动。
我还有一个带有 ProgressBar 的 DialogFragment,我在我的主要活动中创建了它。
在主活动中,我首先执行 AsyncTask,然后创建 DialogFragment。
processTask = new ProcessImageAsyncTask(dataPathFile, lang, this, tessBaseApi);
processTask.execute(bitmap);
android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
DialogFragment dialog = new TessProgressDialog();
dialog.setCancelable(true);
dialog.show(fragmentManager, "tessProgress");
我想在主要活动收到来自异步任务的更新时更新进度条。有什么想法吗?
【问题讨论】:
【参考方案1】:基本上我在写问题时自己找到了解决方案,但我找不到任何其他答案,所以这里是:
解决方法是在主activity中覆盖onAttachFragment:
@Override
public void onAttachFragment(Fragment fragment)
if (fragment instanceof TessProgressDialog)
try
// Instantiate the NoticeDialogListener so we can send events to the host
progressListener = (TessProgressUpdaterInterface) fragment;
catch (ClassCastException e)
// The activity doesn't implement the interface, throw exception
throw new ClassCastException(fragment.toString()
+ " must implement NoticeDialogListener");
super.onAttachFragment(fragment);
TessProgressDialog 将实现 TessProgressUpdaterInterface
public class TessProgressDialog extends DialogFragment implements TessProgressUpdaterInterface
private ProgressBar mProgressBar;
@Override
public void onUpdate(int p)
if(mProgressBar != null)
mProgressBar.setProgress(p);
最后,我有一个接口 TessProgressUpdaterInterface:
public interface TessProgressUpdaterInterface
void onUpdate(int p);
现在只要你收到来自异步任务的更新,就调用下面的代码
if(progressListener != null)
progressListener.onUpdate(progressValues.getPercent());
【讨论】:
以上是关于DialogFragment 和 ProgressBar 在任务更新时更新的主要内容,如果未能解决你的问题,请参考以下文章
DialogFragment 和 ProgressBar 在任务更新时更新
自定义DialogFragment中的Tablayout不显示选项卡文本和图标
如何从Android中没有活动和片段的函数调用DialogFragment?