我有一个使用3个按钮的简单布局。第一个按钮上有个监听器。它会在点击时被调用。监听器检查一些东西,可能下载一些文件,然后启动另一个活动。
在文件下载期间,我想通知用户正在进行下载。我尝试了一些常见的方法,但是我发现使用ProgressBar需要大量的代码。所以我尝试了一些更小的方法:我使用Toast来显示一条消息,然后在下载期间禁用3个按钮。这是代码:
int version_pre = getCurrentVersion();
//Check files on remote server
String URL = Data._URL + "/" + Data.OWNER + "/version";
if(!this.downloadFile(URL, "version")) {
Toast.makeText(this, "Download der Dateien fehlgeschlagen. Fahre mit lokaler Version fort.", Toast.LENGTH_LONG).show();
}
int version_post = getCurrentVersion();
if(version_pre != version_post) { //Neu Dateien besorgen
Button b1 = (Button)findViewById(R.id.btn_Prospekt);
b1.setEnabled(false);
b1 = (Button)findViewById(R.id.btn_Einheitenumrechner);
b1.setEnabled(false);
b1 = (Button)findViewById(R.id.btn_Sonstiges);
b1.setEnabled(false);
Toast.makeText(this, "Aktualisierung der Dateien wird gestartet.", Toast.LENGTH_LONG).show();
if(!fetchAllFiles()) {
Toast.makeText(this, "Download der Dateien fehlgeschlagen. Fahre mit lokaler Version fort.", Toast.LENGTH_LONG).show();
}
b1 = (Button)findViewById(R.id.btn_Prospekt);
b1.setEnabled(true);
b1 = (Button)findViewById(R.id.btn_Einheitenumrechner);
b1.setEnabled(true);
b1 = (Button)findViewById(R.id.btn_Sonstiges);
b1.setEnabled(true);
}
return "";
问题是这样的:即使在调试时,我也看不到任何GUI更改机制实际上做了什么。禁用按钮会使它们变灰。它不是。调用Toast.maketext().show()应该会显示一条消息。它不是。
我怀疑这可能是预期的行为,因为它涉及多种机制。我在操作监听器中调用的内容是否有限制来改变UI?我需要调用一个刷新()类型的方法时,改变UI,而在一个监听器?
谢谢。
您应该在调用Toast的行中添加.show()
,否则您只是创建消息而不显示它。
对于监听器,请确保在UI线程上运行所有GUI更改(除了Toast消息)
try this…
Toast.makeText(activityname.this, "Download der Dateien fehlgeschlagen. Fahre mit lokaler Version fort.", Toast.LENGTH_LONG).show();
我看不出你实际上在哪里设置onClickListener,在你有一个引用到你的按钮。它应该是这样的:
b1.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Toast.makeText(mContext, mContext.getString(R.string.error), Toast.LENGTH_LONG).show();
}
}
});
此外,您使用相同的对象引用b1不同的按钮,所以只有最后一个将工作。