1

我正在尝试使用带有以下代码片段的alertDialog.Builder在对话框中显示我的自定义视图。

AlertDialog.Builder alertViewBuilder = null;
AlertDialog alertViewDialog = null;
public void showPopupView(View popupView) {

if (alertViewBuilder == null) {
    alertViewBuilder = new AlertDialog.Builder(ctContext);
}
    alertViewBuilder.setView(popupView);

if (alertViewDialog == null)
    alertViewDialog = alertViewBuilder.create();

if (!alertViewDialog.isShowing())
    alertViewDialog.show();
}

如果用户对该自定义视图的组件执行任何操作,我想更改/更新对话框的内容。因此,当用户触摸/单击自定义视图的任何组件时,我正在更新popupView并将更新的popupView再次传递给showPopupView(View popupView)但对话框上的视图没有更新。

我的要求与以下示例类似。

  1. 在对话框中显示带有用户名密码文本输入字段和“确定”按钮的登录页面。

  2. 如果用户输入了错误的用户名/密码并按“ OK ”按钮,则应使用视图更新相同的对话框,该视图将显示错误消息 textview 而不是用户名密码文本输入字段和“ OK ”按钮应替换为“再试一次"同一个对话框上的按钮。

  3. 当用户按下“再试一次”按钮时,上一个登录页面应该显示在同一个对话框上。

我的意思是流程应该类似于在同一活动上不断变化的视图。我想我已经提供了关于我的问题的足够信息。请建议我解决我的问题。提前致谢。

4

1 回答 1

-1

我能够管理并找到此问题的解决方案。刚刚删除AlertDialog.Builder并将 AlertDialog 更改为Dialog并在Dialog中调用 addContentView(view)而不是在AlertDialog.Builder上调用setView (view) 。并在Dialog的 contentview 上添加和删除chaildviews 。找到下面的代码片段。

private android.view.ViewGroup.LayoutParams alertLayoutParams = null;
private Dialog alertViewDialog = null;
private LinearLayout cvPopupView;

public void showPopupView(View popupView) {
    if (cvPopupView == null)
        cvPopupView = new LinearLayout(ctContext);
    else
        cvPopupView.removeAllViews();

    cvPopupView.addView(popupView);

    if (alertViewDialog == null) {
        alertViewDialog = new Dialog(ctContext);
        alertViewDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    }

    if (alertLayoutParams == null) {
        alertLayoutParams = new android.view.ViewGroup.LayoutParams(
                android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
                android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
    }

    if (!alertViewDialog.isShowing()) {
        alertViewDialog.addContentView(cvPopupView, alertLayoutParams);
        alertViewDialog.show();
    }
}

如果其他人面临同样的问题,这可能会有所帮助。

于 2013-06-28T08:10:11.223 回答