我想用2个按钮(基本确认对话框)启动AlertDialog,然后将其转换为显示我传递给它的适配器中的项目。当我使用AlertDialog.Builder
创建对话框时,我使用setMessage
和setAdapter
,其中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));
....
有没有人有办法破解这个?
答案 0 :(得分:0)
如果有人好奇,我确实想出了一个黑客。我使用ListView
中的标题视图的概念来改变1)使用TextView作为标题,2)使用ProgressBar作为标题,3)没有标题之间的状态。我操纵了对话框dialog.listView
中的onStart
。在我的适配器中,我有一个最初为空的概念,然后在加载后将数据传递给它,并调用notifyDatasetChanged
。我甚至使用LayoutTransition来制作动画!
我不得不对消息的一些填充进行硬编码,因为对话框通常使用的常量隐藏在alert_dialog.xml
或其他内容中。如果有人好奇,我可以用一些代码发布一个要点。
我确实想到了另一种解决方案,可能是相似数量的代码,但更具可重用性和可读性:实现在消息,ProgressBar指标和RecyclerView之间切换的自定义View,并将视图的实例设置为对话框"自定义视图"。