0

我试图在Snackbar满足条件时解雇 a 。

snackbar.setAction("Retry", new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(isConnected(getApplicationContext())){
                    toggleButtonsState(true);
                    snackbar.dismiss();
                } else {
                    snackbar.show();
                }
            }
        });
        snackbar.show();

但是,Snackbar当单击操作时,实现会自动关闭它。

public Snackbar setAction(CharSequence text, final OnClickListener listener) {
    TextView tv = this.mView.getActionView();
    if(!TextUtils.isEmpty(text) && listener != null) {
        tv.setVisibility(0);
        tv.setText(text);
        tv.setOnClickListener(new OnClickListener() {
            public void onClick(View view) {
                listener.onClick(view);
                Snackbar.this.dismiss();
            }
        });
    } else {
        tv.setVisibility(8);
        tv.setOnClickListener((OnClickListener)null);
    }

    return this;
}

一般来说,有没有办法修改已编译的 gradle 库以满足我的需求。IE。删除此行Snackbar.this.dismiss();。我知道我可以搜索源并放入 libs 文件夹然后我可以修改它但是有没有办法这样做而不是这样?

4

1 回答 1

0

不幸的是,你不能因为Snackbar类是最终的并且不能覆盖方法所以它是行为。

您可以尝试的是设置View.OnTouchListener查看Snackbar并防止它仅针对操作视图获取任何触摸事件。我不确定是否snackBar.getView()返回包括操作视图在内的整个小吃店。

snackBar.getView().setOnTouchListener(new View.OnTouchListener(){
     @Override
     public boolean onTouch (View v, MotionEvent event){
         if(v instanceof Button) {
            //This is the Action view event, do your logic.
             if(isConnected(getApplicationContext())){
                    toggleButtonsState(true);
                 return false;
              }
             return true;
         }
         //not action view, proceed normally
         return false;
      });
于 2015-11-10T20:02:57.780 回答