【问题标题】:how to show Progress Dialog in Non-Activity class inside list view如何在列表视图内的非活动类中显示进度对话框
【发布时间】:2014-09-06 07:47:31
【问题描述】:

我有一个用于 Listview 的适配器类,它位于一个名为 AdapterItems 的类中,该类在 ArrayAdapter 中扩展。

知道如何在此类中使用未在 Activity 中扩展的进度对话框吗?

这是我的列表视图填充方法

public void fill(final ArrayAdapter<RssParser.Item> adapter, final RssParser.Item item, final int position)
    {

        Thread thread = new Thread(new Runnable() {

            @Override
            public void run() {

                ActivityStartup.handler.post(new Runnable() {

                    @Override
                    public void run() {
                        ActivityStartup.dismissLoadingDialog();
                        txtTitle.setText(item.title);
                        txtDate.setText(item.pubDate);
                        txt_time.setText(item.time);
                        txtDescription.setText(item.description);
                        layoutRoot.setOnClickListener(new OnClickListener() {

                            @Override
                            public void onClick(View v) {

                                if (progress == null) {
                                    progress = new ProgressDialog(v.getContext());
                                    progress.setTitle("title");
                                    progress.setMessage("loading");
                                }
                                progress.show();
                                G.SelectedApplication = item;

                                Intent intent = new Intent(G.context, Adapter_Description.class)
                                        .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                intent.putExtra("INPUT", item.link + "");
                                intent.putExtra("INPUT_DESC", item.description + "");
                                G.context.startActivity(intent);
                            }
                        });

                    }
                });
            }
        });
        thread.start();

    }
}

当我单击列表视图上的项目以查看对话框时,我遇到了崩溃,这是我的日志

09-06 12:04:10.368: E/AndroidRuntime(5112): 致命异常: main 09-06 12:04:10.368: E/AndroidRuntime(5112): android.view.WindowManager$BadTokenException: 无法添加窗口 -- 令牌 null 不适用于应用程序 09-06 12:04:10.368: E/AndroidRuntime(5112): 在 android.view.ViewRootImpl.setView(ViewRootImpl.java:571) 09-06 12:04:10.368: E/AndroidRuntime(5112): 在 android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:246) 09-06 12:04:10.368: E/AndroidRuntime(5112): 在 android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 09-06 12:04:10.368: E/AndroidRuntime(5112): 在 android.app.Dialog.show(Dialog.java:281) 09-06 12:04:10.368: E/AndroidRuntime(5112): at com.myApp.course.app.feed_reader.AdapterItems$ViewHolder$1$1$1.onClick(AdapterItems.java:71) 09-06 12:04:10.368: E/AndroidRuntime(5112): 在 android.view.View.performClick(View.java:4204) 09-06 12:04:10.368: E/AndroidRuntime(5112): 在 android.view.View$PerformClick.run(View.java:17355) 09-06 12:04:10.368: E/AndroidRuntime(5112): 在 android.os.Handler.handleCallback(Handler.java:725) 09-06 12:04:10.368: E/AndroidRuntime(5112): 在 android.os.Handler.dispatchMessage(Handler.java:92) 09-06 12:04:10.368: E/AndroidRuntime(5112): 在 android.os.Looper.loop(Looper.java:137) 09-06 12:04:10.368: E/AndroidRuntime(5112): 在 android.app.ActivityThread.main(ActivityThread.java:5041) 09-06 12:04:10.368: E/AndroidRuntime(5112): 在 java.lang.reflect.Method.invokeNative(Native Method) 09-06 12:04:10.368: E/AndroidRuntime(5112): 在 java.lang.reflect.Method.invoke(Method.java:511) 09-06 12:04:10.368: E/AndroidRuntime(5112): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 09-06 12:04:10.368: E/AndroidRuntime(5112): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 09-06 12:04:10.368: E/AndroidRuntime(5112): at dalvik.system.NativeStart.main(Native Method) 09-06 12:04:36.292: E/InputDispatcher(467): 频道 'a69034a0 com.myApp.course.app.feed_reader/com.myApp.course.app.feed_reader.ActivityStartup (server)' ~ 频道已不可恢复地损坏并且将被处置!

【问题讨论】:

    标签: android android-activity progressdialog


    【解决方案1】:

    只需将 Activity Context 传递给您的 non_activity 类的构造函数,然后使用该上下文来显示您的 ProgressDialog

    private Activity activityContext;
    
    Public YourClassName(Activity activityContext)
    {
      this.activityContext = activityContext;
    }
    

    然后使用这个上下文来初始化一个 ProgressDialog :

    progressDialog = new ProgressDialog(activityContext);
    

    【讨论】:

    • 怎么样?我是安卓新手
    • 我做了,但知道我在这个方法上有错误:隐式超级构造函数 ArrayAdapter() 未定义。必须显式调用另一个构造函数
    【解决方案2】:

    你必须通过

    活动上下文

    到您的非活动课程。然后使用该上下文显示对话框

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-19
      • 2020-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多