我正在尝试使用小部件创建应用程序。当用户将小部件放在桌面上时,列表视图应带有项目列表。用户选择一个项目,然后使用与该项目相关的相应文本创建窗口小部件。我以为我应该通过在服务中显示一个对话框来做到这一点,但是这让我感到震惊


  原因:android.view.WindowManager $ BadTokenException:无法添加
  窗口-令牌null不适用于应用程序


到dialog_newitem.show();线。为简单起见,我现在使用一个简单的alertdialog。

是这样做的方法吗?我没有在网上找到任何有关此内容的信息。

public class UpdateWidgetService extends Service {
    private static final String LOG = "de.vogella.android.widget.example";
    public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";
    public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget";
    String value;
    Dialog dialog_newitem;
    EditText et_newitem;


    @Override
    public void onStart(Intent intent, int startId) {
         Toast.makeText(this, "UpdateWidgetService", Toast.LENGTH_SHORT).show();

            dialog_newitem = new Dialog(this);  //I tried UpdateWidgetService.this, too
            dialog_newitem.setContentView(R.layout.dialog_productlists_grp_capitalized);
            dialog_newitem.setTitle("Select");
            dialog_newitem.setCancelable(true);

            et_newitem = (EditText) dialog_newitem.findViewById(R.id.et_item_name);

            Button btn_Save = (Button) dialog_newitem.findViewById(R.id.btn_save_pr);
            btn_Save.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    value = et_newitem.getText().toString();
                }
                });


            Button btn_Cancel = (Button) dialog_newitem.findViewById(R.id.btn_cancel_pr);
            btn_Cancel.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    dialog_newitem.dismiss();
                }

            });
            dialog_newitem.show(); //error


         Toast.makeText(this, "value: " + value, Toast.LENGTH_SHORT).show();


    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}


我在代码的其他部分中使用了alertdialog,并且在这里工作正常。我认为这与服务有关。

最佳答案

您无法在服务中显示对话框。

如果您真的想显示一个对话框。

尝试启动一个活动并将该活动的主题设置为Theme.Dialog。

The ApiDemo Project中有一个演示

10-07 19:24
查看更多