我使用快餐栏通知我的应用程序的用户他们没有连接到互联网。我在小吃栏添加了一个“重试”操作,重新检查连接。我希望小吃栏一直显示,直到我自己关闭它(当找到互联网连接时),但我无法让它工作。每当我单击该操作时,快餐栏就会消失。
我已将持续时间设置为无限期,并且小吃店确实会无限期地保持打开状态,但是当我单击该操作时它会消失。
我在网上读到点击操作后自动关闭小吃栏并不总是默认行为。
编辑:
我觉得我的问题可能措辞不当。我有一个带有动作的小吃店,但我不希望小吃店在执行该操作时关闭,它会自动执行 atm。
您可以覆盖按钮的 OnClickListener 集。首先使用一些虚拟侦听器制作小吃吧并设置动作
Snackbar snackbar = Snackbar.make(view,"TXT",Snackbar.LENGTH_LONG).setAction("OK", new View.OnClickListener() {
@Override
public void onClick(View v) { }
});
然后找到按钮并设置您的侦听器
snackbar.show();
ViewGroup group = (ViewGroup) snackbar.getView();
for(int i=0; i< group.getChildCount();i++){
View v = group.getChildAt(i);
if(v instanceof Button){
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
YOUR_ACTION();
}
});
}
}
你可以试试这个
final Snackbar snackbar = Snackbar.make("your view".getRootView(), "Annotations", Snackbar.LENGTH_INDEFINITE);
snackbar.setAction("your action", new View.OnClickListener() {
@Override
public void onClick(View v) {
// do something
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
snackbar.show();
}
}, 1);
}
});
snackbar.show();
动作点击后,snackbar 会自动关闭,但会有一些延迟,所以如果snackbar.show();直接在 中调用,snackbarOnClickListener不会显示。因此,要使其始终显示,请在显示之前给它一些延迟。(令人惊讶的是,一毫秒的延迟就足够了)
您可以执行以下操作:
snack = Snackbar.make(binding.root, "Your text", Snackbar.LENGTH_INDEFINITE)
.setAction("Button Text") {
// do something here
it.postDelayed({
snack.show()
}, 1000) // Snackbar reappears after 1 second
}