在没有 Activity 的另一个 class 文件中使用 Toast 扩展 Android

Using Toast in another class file without Activity extends Android

我有 2 个文件:Core(扩展 Activity)和 DwCore。我在 Core 子类中使用 AsyncTask,我想在 DwCore 子类中使用 Toast,但我无法正确获取 Core Context。

核心

class DwFiles extends AsyncTask<Void, Void, Long> {
    protected Long doInBackground(Void... parms) {
        long totalSize = 0;
        dwCore.mainCounter(Core.this);
        return totalSize;
    }
}

DwCore 子类

public void mainCounter(Context c){
    Integer count = 0;
    for(int i=0;i<count;i++){
        Toast.makeText(c, count.toString(), Toast.LENGTH_SHORT).show();
    }
}

您不能做任何影响工作线程 UI 的事情 - 包括显示 toasts。

class DwFiles extends AsyncTask<Void, Void, Long> {
protected Long doInBackground(Void... parms) {
    long totalSize = 0;
     publishProgress(check_point);
    return totalSize;
}
}

protected void onProgressUpdate(Integer integers) {
   dwCore.mainCounter(Core.this);
}
public void mainCounter(Context c){
Integer count = 0;
     for(int i=0;i<count;i++){
         Toast.makeText(getActivity(), count.toString(), Toast.LENGTH_SHORT).show();
    }
}

您可以使用 getActivity() 函数或 this.getActivity()。
getActivity() 可以在 Fragment 中用于获取 Fragment 的父级 Activity(基本上是显示 Fragment 的 Activity)。

无法完成,因为 doInBackGround 在无法访问 ui 线程的后台线程上运行。 您可以做的是,创建一个自定义接口,在您的 activity 上实现它,然后从 onProgressUpdate() 推送 ui 相关更新。

    Interface ProgUpdate{
void uiUpdate(int update)
}

BackGround theread :
ProgUpdate listener;

onProgressUpdate(Int i){
listener.uiUpdate(i)
}