Snackbar操作getView()

4
在我的Activity中,我实现了OnClickListener接口。 MainActivity extends AppCompatActivity implements View.OnClickListener 像这样初始化snackbar:
snackbar = Snackbar.make(view, R.string.msg, Snackbar.LENGTH_LONG);
snackbar.setAction(R.string.action_undo, this);

但是我不能在实现的OnClickListener接口方法中处理它

@Override
public void onClick(View v) {
    // this not work!
    // snackbar id is different from snackbar action id
    if (v.getId() == snackbar.getView().getId()) {

    }
}

有人知道如何从Snackbar中获取Action View吗?

请问您能告诉我这个的确切需求吗? - Shadab Ansari
这个的确需要一个漂亮的代码结构。许多可点击的视图都由一个方法处理,该方法使用View v作为输入参数,并通过获取此视图的ID来分离我的点击逻辑。但是Snackbar缺少action.getView()。 - Vasil Valchev
3个回答

11

对于每个SnackbarSnackbar文本视图的资源id为

    android.support.design.R.id.snackbar_text

Snackbar 的操作视图资源 ID 是

    android.support.design.R.id.snackbar_action
如果我正确理解了您的问题,您想获取“Snackbar”操作资源ID。 正如我上面提到的,在onClick()中,您可以轻松获取它并像这样使用 -
@Override
public void onClick(View v) {

    if (v.getId() == android.support.design.R.id.snackbar_action) {

    }
}

1
v.getId()

始终保留:

android.support.design.R.id.snackbar_action

文档


0

您可以尝试使用以下代码在 Snackbar 上设置操作。

View.OnClickListener snackbarClickListener = new View.OnClickListener() {
         @Override
         public void onClick(View v) {

         }
     };

snackbar = Snackbar.make(view, R.string.msg, Snackbar.LENGTH_LONG);
snackbar.setAction(R.string.action_undo, snackbarClickListener);

我的问题不是关于如何将操作添加到snack,我需要知道如何获取这个:snack.getAction().getView()。 - Vasil Valchev
根据文档[http://developer.android.com/reference/android/support/design/widget/Snackbar.html],Snackbar类没有`getAction`方法。您能再解释一下吗? - gautamprajapati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接