onContextItemSelected to Dialog

时间:2011-10-20 02:56:10

标签: java android

当我选择ContextMenu项目以弹出自定义对话框时,我收到此错误。

 W/InputManagerService(59): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@44f518c0

以下代码

  public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    Map<String, String> data = (Map<String, String>) getListView().getItemAtPosition(info.position);
    preferences = PreferenceManager.getDefaultSharedPreferences(this);
    String user_ids = preferences.getString("userID", null);
    switch (item.getItemId()) {
    case R.id.pm:
        pms(data.get("pid"),user_ids,data.get("Name"));
        return true;
    }
    return super.onContextItemSelected(item);
  }

private void pms(final String fu2, final String to,final String to2) {
    dialog = new Dialog(this.getParent());
    dialog.setContentView(R.layout.popup_reply);
    dialog.setTitle("To: "+to2);
    dialog.setCancelable(true);
    preferences = PreferenceManager.getDefaultSharedPreferences(this);
    body = (EditText) dialog.findViewById(R.id.editText2);
    sub = (EditText) dialog.findViewById(R.id.editText1);

    Button button = (Button) dialog.findViewById(R.id.Button01);
    button.setOnClickListener(new OnClickListener() {
        @Override
            public void onClick(View v) {
            dialog.dismiss();
            }
        });
    Button button2 = (Button) dialog.findViewById(R.id.Button02);
    button2.setOnClickListener(new OnClickListener() {
        @Override
            public void onClick(View v) {
            new ADownloadFileAsync().execute(fu2);
        }
        });
    dialog.show();
}

我只假设在调用dialg之前Contextmenu没有失焦。因为我可以从一个按钮调用对话框就好了。

2 个答案:

答案 0 :(得分:2)

唯一突然出现的是在创建对话框时使用父上下文而不是调用活动上下文。

dialog = new Dialog(this.getParent());

你确定它不需要只是

dialog = new Dialog(this);

到目前为止,我见过的所有示例都没有涉及在构造函数中调用当前父项。

另请参阅此处http://developer.android.com/guide/topics/ui/dialogs.html

中的创建自定义对话框部分

以及显示对话框http://developer.android.com/guide/topics/ui/dialogs.html#ShowingADialog

上的相关位

答案 1 :(得分:0)

或许更好的解决方案就是转移到DialogFragment。即使您正在使用旧版api进行开发,也可以通过android compatibility library进行访问。