对话框上的视图在应该更改时不会更改
view on dialog doesn't change when it should
我有一个 ListView
,当一个项目被点击时,它会创建新的 PlaySongAlertDialog 对象并将参数传递给它。现在以下代码的问题是,只有在第一次它实际上更改了 artistCheckBox
的文本,当我单击关闭然后在另一个 ListView
行上它向我显示相同的文本时 artistCheckBox
.
我找不到 post 但我记得有人说我应该覆盖 onPrepareDialog
但我在 AlertDialog.Builder
class.
上找不到这样的方法
public class PlaySongAlertDialog extends AlertDialog.Builder {
public PlaySongAlertDialog(final Context context, final String songName, final Intent service) {
super(context);
LayoutInflater inflater = LayoutInflater.from(context);
View dialoglayout = inflater.inflate(R.layout.download_song_alert_dialog_check_box, null);
final CheckBox artistCheckBox = (CheckBox) dialoglayout.findViewById(R.id.artist_checkbox);
final CheckBox albumCheckBox = (CheckBox) dialoglayout.findViewById(R.id.album_checkbox);
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try{
artistCheckBox.setText("Add artist name (" + getSomethingFromTheWeb.getArtist(songName) +")");
} catch(Exception e){
artistCheckBox.setText("Add artist name (can't found)" );
artistCheckBox.setClickable(false);
}
}
});
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
setMessage("Do you want to play: " + songName);
setView(dialoglayout);
}
这也是我创建新对话框的方式(此代码位于主 activity)
DownloadSongAlertDialog dialog = new DownloadSongAlertDialog(this, name, serviceIntent);
dialog.show();
有没有办法每次都创建一个真正的对话框而不是重复使用最后一个对话框,也许清理缓存什么的。
thread.join();
正在阻塞 UI 线程等待另一个线程完成。这就是您看不到对话框更新的原因。要修复你可以子类化 AsyncTask
,并在你的 AlertDialog
的构造函数中启动它。当调用 onPostExecute
时,您填写 View
并显示它。
我有一个 ListView
,当一个项目被点击时,它会创建新的 PlaySongAlertDialog 对象并将参数传递给它。现在以下代码的问题是,只有在第一次它实际上更改了 artistCheckBox
的文本,当我单击关闭然后在另一个 ListView
行上它向我显示相同的文本时 artistCheckBox
.
我找不到 post 但我记得有人说我应该覆盖 onPrepareDialog
但我在 AlertDialog.Builder
class.
public class PlaySongAlertDialog extends AlertDialog.Builder {
public PlaySongAlertDialog(final Context context, final String songName, final Intent service) {
super(context);
LayoutInflater inflater = LayoutInflater.from(context);
View dialoglayout = inflater.inflate(R.layout.download_song_alert_dialog_check_box, null);
final CheckBox artistCheckBox = (CheckBox) dialoglayout.findViewById(R.id.artist_checkbox);
final CheckBox albumCheckBox = (CheckBox) dialoglayout.findViewById(R.id.album_checkbox);
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try{
artistCheckBox.setText("Add artist name (" + getSomethingFromTheWeb.getArtist(songName) +")");
} catch(Exception e){
artistCheckBox.setText("Add artist name (can't found)" );
artistCheckBox.setClickable(false);
}
}
});
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
setMessage("Do you want to play: " + songName);
setView(dialoglayout);
}
这也是我创建新对话框的方式(此代码位于主 activity)
DownloadSongAlertDialog dialog = new DownloadSongAlertDialog(this, name, serviceIntent);
dialog.show();
有没有办法每次都创建一个真正的对话框而不是重复使用最后一个对话框,也许清理缓存什么的。
thread.join();
正在阻塞 UI 线程等待另一个线程完成。这就是您看不到对话框更新的原因。要修复你可以子类化 AsyncTask
,并在你的 AlertDialog
的构造函数中启动它。当调用 onPostExecute
时,您填写 View
并显示它。