2017-06-01 13 views
2

AppBar,FloatingActionButtonおよびRecyclerViewActivityを作成しました。私はチェック可能にしたいので、自分のFABを実装します。私のコードは以下の通りです:チェック可能な実装のFloatingActionButton

public class CheckableFloatingActionButton extends FloatingActionButton implements Checkable { 

    private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked}; 

    private boolean checked = false; 
    private boolean broadcasting; 

    private OnCheckedChangeListener onCheckedChangeListener; 

    public interface OnCheckedChangeListener { 

     void onCheckedChanged(CheckableFloatingActionButton fab, boolean isChecked); 
    } 

    public CheckableFloatingActionButton(Context context) { 
     this(context, null); 
    } 

    public CheckableFloatingActionButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 

     TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CheckableFloatingActionButton); 
     setChecked(a.getBoolean(R.styleable.CheckableFloatingActionButton_checked, false)); 
     a.recycle(); 

    } 

    @Override 
    public void setChecked(boolean checked) { 
     if (this.checked != checked) { 
      this.checked = checked; 
      refreshDrawableState(); 
      if (broadcasting) { 
       return; 
      } 

      broadcasting = true; 
      if (onCheckedChangeListener != null) { 
       onCheckedChangeListener.onCheckedChanged(this, this.checked); 
      } 

      broadcasting = false; 
     } 
    } 

    public void toggle(boolean animate) { 
     if (animate) { 
      setChecked(checked); 
      return; 
     } 
     checked = !checked; 
     jumpDrawablesToCurrentState(); 

    } 

    public void setOnCheckedChangeListener(OnCheckedChangeListener listener) { 
     onCheckedChangeListener = listener; 
    } 

    @Override 
    public boolean performClick() { 
     toggle(); 
     return super.performClick(); 
    } 

    @Override 
    public boolean isChecked() { 
     return checked; 
    } 

    @Override 
    public void toggle() { 
     setChecked(!checked); 
    } 

    @Override 
    public int[] onCreateDrawableState(int extraSpace) { 
     final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); 
     if (isChecked()) { 
      mergeDrawableStates(drawableState, CHECKED_STATE_SET); 
     } 
     return drawableState; 
    } 

} 

FABを上下にスクロールして表示するまで機能しています。ご覧のように、FABは即座に設定するのではなく、ドロアブルをアニメーション化します。だからこそバグが発生している(私は思う)。それを解決する方法はありますか?

link

答えて

0

ザッツFloatingAcionsMenuは、あなたはそれが拡大していますときのためのリスナーを使用することができますかいいえ、あなたはそれがだときのリスナーを使用していない理由は、パラメータがtrueの「チェックする」場合はチェックを展開し、その場合場合ドロアブルを埋める。

fam.setOnFloatingActionsMenuUpdateListener(new FloatingActionsMenu.OnFloatingActionsMenuUpdateListener() { 
     @Override 
     public void onMenuExpanded() { 
      if(checked){ 
      //do something 
      } 
     } 

     @Override 
     public void onMenuCollapsed() { 
     } 
    }); 
0

のAndroid StudioでFloatingActionButtonBasicサンプルはFloatingActionButtonCheckable実装が含まれています。 CollapsingToolbarLayoutで上/下にスクロールするとうまくいきます。しかし、私はhttps://developer.android.com/reference/android/widget/CompoundButton.htmlを使用すると、より洗練されたソリューションになると思います。

関連する問題