转换AlertDialog从显示消息到ListView适配器?

时间:2017-01-03 08:46:34

标签: android alertdialog

我想用2个按钮(基本确认对话框)启动AlertDialog,然后将其转换为显示我传递给它的适配器中的项目。当我使用AlertDialog.Builder创建对话框时,我使用setMessagesetAdapter,其中ArrayAdapter最初为空。单击正面按钮时,理想情况下我想平滑过渡到隐藏按钮并在ListView中显示2个项目。我将消息设置为null,操作按钮,并向ArrayAdapter添加2个对象。是的,除了AlertController#setupContent这样做的事实:

    if (mMessage != null) {
        mMessageView.setText(mMessage);
    } else {
        mMessageView.setVisibility(View.GONE);
        mScrollView.removeView(mMessageView);

        if (mListView != null) {
            final ViewGroup scrollParent = (ViewGroup) mScrollView.getParent();
            final int childIndex = scrollParent.indexOfChild(mScrollView);
            scrollParent.removeViewAt(childIndex);
            scrollParent.addView(mListView, childIndex,
                    new LayoutParams(MATCH_PARENT, MATCH_PARENT));
            ....

有没有人有办法破解这个?

1 个答案:

答案 0 :(得分:0)

如果有人好奇,我确实想出了一个黑客。我使用ListView中的标题视图的概念来改变1)使用TextView作为标题,2)使用ProgressBar作为标题,3)没有标题之间的状态。我操纵了对话框dialog.listView中的onStart。在我的适配器中,我有一个最初为空的概念,然后在加载后将数据传递给它,并调用notifyDatasetChanged。我甚至使用LayoutTransition来制作动画!

我不得不对消息的一些填充进行硬编码,因为对话框通常使用的常量隐藏在alert_dialog.xml或其他内容中。如果有人好奇,我可以用一些代码发布一个要点。

我确实想到了另一种解决方案,可能是相似数量的代码,但更具可重用性和可读性:实现在消息,ProgressBar指标和RecyclerView之间切换的自定义View,并将视图的实例设置为对话框"自定义视图"。