2015-11-10 2 views
0

Я пытаюсь уволить Snackbar, когда условие выполнено.Поведение библиотеки поддержки переопределения поддержки

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 библиотеку так, чтобы справиться со своими потребностями. то есть. для удаления этой строки Snackbar.this.dismiss();. Я знаю, что могу искать источник и вставлять его в папку libs, а затем я могу его изменить, но есть ли способ сделать это, а не это?

ответ

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; 
     }); 
Смежные вопросы