10

我使用快餐栏通知我的应用程序的用户他们没有连接到互联网。我在小吃栏添加了一个“重试”操作,重新检查连接。我希望小吃栏一直显示,直到我自己关闭它(当找到互联网连接时),但我无法让它工作。每当我单击该操作时,快餐栏就会消失。

我已将持续时间设置为无限期,并且小吃店确实会无限期地保持打开状态,但是当我单击该操作时它会消失。

我在网上读到点击操作后自动关闭小吃栏并不总是默认行为。

编辑:

我觉得我的问题可能措辞不当。我有一个带有动作的小吃店,但我不希望小吃店在执行该操作时关闭,它会自动执行 atm。

4

3 回答 3

1

您可以覆盖按钮的 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();
                }
            });
        }
 }
于 2016-08-29T09:27:36.643 回答
1

你可以试试这个

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不会显示。因此,要使其始终显示,请在显示之前给它一些延迟。(令人惊讶的是,一毫秒的延迟就足够了)

于 2018-08-13T14:38:53.527 回答
0

您可以执行以下操作:

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
            }
于 2019-11-20T12:07:51.410 回答