单击侦听器代码不显示 Toast



我有一个使用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不同的按钮,所以只有最后一个将工作。

相关内容

  • 没有找到相关文章

最新更新