onClick侦听器代码不显示Toasts

时间:2011-07-21 08:40:55

标签: android user-interface

我有一个简单的布局,使用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方法?

感谢。

3 个答案:

答案 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,因此只有最后一个按钮才有效。