2016-07-18 9 views
1

私は、ユーザーがカラーピッカーやあらかじめ定義されたボタンを使って引用符の背景を変更できるアプリを持っています。私は、ユーザーが長いクリックで定義済みのボタンの色を変更し、カラーピッカーが表示され、ボタンに色を保存することを選択できるようにしたいと考えています。カラーピッカーはRecyclerViewアダプタから背景色を変更しませんか?

カラーピッカーのリスナーメソッドは、私のRecyclerViewアダプタで動作しません。カラーピッカーのリスナーは、私に現在選択されている色を与える必要があります。私はLog.d("TAG", ""+color); でそれをテストしていると私は、背景色のい​​ずれかの値

RecyclerViewのadapaterのViewholder取得いけない:ここで

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener, ColorPickerDialogFrag2.ColorPickerDialogListener { 

    public ImageButton colorButton; 

    public ViewHolder(View itemView) { 
     super(itemView); 

     this.colorButton = (ImageButton) itemView.findViewById(R.id.colorbutton); 
     itemView.setOnClickListener(this); 
     itemView.setOnLongClickListener(this); 

    } 

    @Override 
    public void onClick(View v) { 

     int position = getLayoutPosition(); 
     MainActivity.relativeLayout.setBackgroundColor(Color.parseColor((mColorButtons.get(position).getColor()))); 
     PreferenceManager.getDefaultSharedPreferences(App.getAppContext()).edit().putInt(App.BACKGROUND, Color.parseColor(mColorButtons.get(position).getColor())).apply(); 


    //ColorPicker for customizing colors for buttons 

    @Override 
    public boolean onLongClick(View v) { 


     ColorPickerDialogFrag2 cp = ColorPickerDialogFrag2.newInstance(6, Color.YELLOW); 
     cp.setStyle(android.support.v4.app.DialogFragment.STYLE_NORMAL, R.style.AppTheme); 
     cp.show(fragmentManager,"d"); 

     return false; 
    } 

    @Override 
    public void onPreviewColorChanged(int dialogId, int color) { 

     //color is the current color from the colorpicker 

      Log.d("TAG", ""+color); 
      MainActivity.mEditText.setBackgroundColor(color); 




    } 

    @Override 
    public void onColorSelected(int dialogId, int color) { 
     Log.d("TAG", ""+color); 
     MainActivity.mEditText.setBackgroundColor(color); 

    } 
} 

を、それが現在、私のアプリでどのように動作するかのビデオです: https://www.youtube.com/watch?v=lpYjKMLd9aU

私が使用してカラーピッカーlibrayはこれです:https://github.com/danielnilsson9/color-picker-view

+0

あなたは 'ColorPickerDialogFrag2'を作成するために何を使用していますか?それは図書館かあなた自身のカスタムクラスですか? – Bryan

+0

@ブライアンああ、その図書館。私は今それへのリンクでそれをmetionします。 – Muddz

+0

'ColorPickerDialogFrag2'コードを投稿できますか? – Bryan

答えて

1

問題はそれ以外の場合は例外をスローし、あなたがあなたのViewHolderためColorPickerDialogListenerを実装しますが、ライブラリhereのコードを見て、あなたはそれがColorPickerDialogListenerとしてactivityキャストしようとしたことを見ることができるということです。したがって、このリスナーをMainActivityに実装して、結果を確認してください。

UPDATE:

... 
private ColorPickerDialogListener mListener; 

public static ColorPickerDialogFrag2 newInstance(ColorPickerDialogListener listener, 
     int dialogId, int initialColor) { 

    ColorPickerDialogFrag2 frag = new ColorPickerDialogFrag2(); 
    frag.setListener(listener); 
    Bundle args = new Bundle(); 
    args.putInt("id", dialogId); 
    args.putInt("init_color", initialColor); 

    frag.setArguments(args); 

    return frag; 
} 

public void setListener(ColorPickerDialogListener mListener) { 
    this.mListener = mListener; 
} 
... 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 

    if (mListener == null) { 
     // Check for listener in parent activity 
     try { 
      mListener = (ColorPickerDialogListener) activity; 
     } catch (ClassCastException e) { 
      e.printStackTrace(); 
      throw new ClassCastException("Parent activity must implement " 
        + "ColorPickerDialogListener to receive result."); 
     } 
    } 
} 
... 

そしてちょうどnewInstanceメソッドのパラメータとしてColorPickerDialogListenerを渡します:

あなたはこのような何かにあなたのColorPickerDialogFrag2のロジックを変更する必要があり、その場合におけるので

@Override 
public boolean onLongClick(View v) { 
    ColorPickerDialogFrag2 cp = ColorPickerDialogFrag2.newInstance(this, 6, Color.YELLOW); 
    cp.setStyle(android.support.v4.app.DialogFragment.STYLE_NORMAL, R.style.AppTheme); 
    cp.show(fragmentManager,"d"); 
    return false; 
} 
+0

よろしくお願いします。 MainActivityで動作することは分かっていますが、あらかじめ定義されたボタンがある場所で動作する必要があります。したがって、ユーザーがrecyclerviewから事前に定義されたボタンの1つを長押しすると、色を変更することができます。 – Muddz

+0

私の更新された回答を確認してください – rom4ek

+0

それはすべきでした!ありがとう。しかし、なぜあなたは自分自身のリスナーをnewInstanceに渡さなければならなかったのか説明できますか? – Muddz

関連する問題