我面临以下问题。
我有一张图片Gallery
,我想打开AlertDialog
以显示有关所点击图片的一些信息。我第一次点击图片,它运行得很好。但是接下来的几次,即使我点击不同的图像,同样的对话框也会出现。
当我关注此用户案例时
,我得到了这些照片:
click na galeria... position: 2
startUserInformationDialog()... `this.position`: 2
onCreateDialog on switch.. `this.position`: 2
DISMISSING DIALOG `this.position`: 2
click na galeria... position: 6
startUserInformationDialog()... `this.position`: 6
DISMISSING DIALOG `this.position`: 6
这意味着代码未通过 onCreateDialog
运行public AlertDialog createUserInformationAlertDialog() {
LayoutInflater inflater = getLayoutInflater();
View dialoglayout = inflater.inflate(R.layout.dialog_user_info,
(ViewGroup) findViewById(R.id.dialog_user_layout_root));
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(dialoglayout);
final MyObject ea = myList.get(positionUserToHaveInformationDisplayedOnTheDialog);
// Setting values according to element to be shown
TextView textView = (TextView) dialoglayout
.findViewById(R.id.user_name_value);
textView.setText(ea.getName());
...
builder.setNegativeButton(Locale_PT_BR.BACK,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
Log.d("PRINT 1",
"DISMISSING DIALOG `this.position`: "
+ positionUserToHaveInformationDisplayedOnTheDialog);
dialog.dismiss();
}
});
return builder.create();
}
private void startUserInformationDialog() {
Log.d("PRINT 2", "startUserInformationDialog()... `this.position`: "
+ positionUserToHaveInformationDisplayedOnTheDialog);
showDialog(DIALOG_USER_INFORMATION);
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_USER_INFORMATION:
Log.d("PRINT 3", "onCreateDialog on switch.. `this.position`: "
+ positionUserToHaveInformationDisplayedOnTheDialog);
return createUserInformationAlertDialog();
default:
return null;
}
}
private void startGallery() {
myPhotoBar = (Gallery) findViewById(R.id.gallery);
myPhotoBar.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int position,
long id) {
Log.d("PRINT 4", "click na galeria... position: " + position);
positionUserToHaveInformationDisplayedOnTheDialog = position;
startUserInformationDialog();
}
});
}
答案 0 :(得分:4)
使用onPrepareDialog()
方法填充数据对话框。如果要销毁对话框,则应调用removeDialog()
方法。
答案 1 :(得分:1)
我相信如果ID相同,showDialog只调用onCreateDialog一次。如果要更新已创建的对话框,可以覆盖onPrepareDialog,以便在向用户显示之前更新您喜欢的内容。
答案 2 :(得分:1)
没关系,因为如果你看到doc,就会在第一时间调用onCreateDialog。
“当第一次请求对话框时,Android会从您的Activity调用 onCreateDialog(int),这是您应该实例化Dialog的地方。此回调方法传递给您传递给showDialog(int)的相同ID。创建对话框后,返回方法末尾的对象。“
您需要知道这将创建一次。
致电 onPrepareDialog 。
“在显示对话框之前,Android还会调用onPrepareDialog(int,Dialog)上的可选回调方法。如果要在每次打开时更改对话框的任何属性,请定义此方法。 每次打开对话框时都会调用此方法,而onCreateDialog(int)仅在第一次打开对话框时调用。如果没有定义onPrepareDialog( ),然后对话框将保持与上一次打开时相同。此方法还传递对话框的ID,以及您在onCreateDialog()中创建的Dialog对象。“
答案 3 :(得分:0)
您可以试试simple android dialog popup library。在您的活动中使用非常简单。
如果你不需要复杂的功能,只需要一行代码即可创建对话框。
Pop.on(activity).with().title(R.string.title).body(R.string.body).show();
只需在gradle依赖项中包含以下lib
dependencies {
compile 'com.vistrav:pop:2.0'
}