2016-07-18 1 views
1

사용자가 색상 선택기 또는 미리 정의 된 버튼을 사용하여 따옴표의 배경을 변경할 수있는 앱이 있습니다. 사용자가 미리 정의 된 버튼의 색상을 longclick으로 변경 한 다음 색상 피커가 나타나고 사용자가 버튼에 색상을 저장하도록 선택할 수있게하려고합니다.색상 선택기가 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://github.com/danielnilsson9/color-picker-view

: https://www.youtube.com/watch?v=lpYjKMLd9aU 내가 사용

색상 선택기 libray이있다

+0

'ColorPickerDialogFrag2'를 만들 때 무엇을 사용하고 있습니까? 라이브러리입니까, 아니면 사용자 정의 클래스입니까? – Bryan

+0

@Bryan 오, 그 도서관. 나는 지금 그것을 링크로 metion 것이다. – Muddz

+0

'ColorPickerDialogFrag2' 코드를 게시 할 수 있습니까? – Bryan

답변

1

ColorPickerDialogListener을 구현했지만 라이브러리 here의 코드를 살펴보면 activityColorPickerDialogListener으로 캐스팅하려고 시도하는 것을 볼 수 있습니다. 그렇지 않으면 예외가 발생합니다. 따라서이 수신기를 MainActivity에 구현하고 결과를 확인하십시오.

UPDATE : 단지 newInstance 메서드에 매개 변수로 ColorPickerDialogListener을 통과 한 후

... 
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."); 
     } 
    } 
} 
... 

: 그리고 당신이 이런 식으로 뭔가에 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에서 작동한다는 것을 알고 있지만 사전 정의 된 버튼이있는 adapater에서 작동해야합니다. 따라서 사용자가 recyclerview에서 미리 정의 된 버튼 중 하나를 longclick하면 색상을 변경할 수 있습니다. – Muddz

+0

업데이트 된 답변 확인 – rom4ek

+0

그래야 제대로 작동했습니다! 감사. 하지만 왜 우리가 청취자를 newInstance에 전달해야하는지 설명 할 수 있습니까? – Muddz

관련 문제