我有一个简单的布局,使用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?在Listener中更改UI时,是否需要调用refresh()kinda方法?
感谢。
答案 0 :(得分:0)
您应该将.show()
添加到您调用Toast的行,否则您只是在不显示消息的情况下创建消息。
对于侦听器,请确保在UI线程上运行所有GUI更改(Toast消息除外)(另请参阅this post)
答案 1 :(得分:0)
试试这个......
Toast.makeText(activityname.this, "Download der Dateien fehlgeschlagen. Fahre mit lokaler Version fort.", Toast.LENGTH_LONG).show();
答案 2 :(得分:0)
在您引用按钮后,我无法看到您实际设置onClickListener的位置。它应该是这样的:
b1.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Toast.makeText(mContext, mContext.getString(R.string.error), Toast.LENGTH_LONG).show();
}
}
});
此外,您对不同的按钮使用相同的对象引用b1,因此只有最后一个按钮才有效。