2016-11-30 1 views
0

OnClickListener (OnBackButtonClickListener)를 사용하여 사용자 지정 ActionBar 구성 요소를 구현 한 사용자 지정 클래스 (ActionBar.class)가 있습니다.이 메서드를 내 조각에서 호출하면 트리거되지 않습니다. 당신은조각 내에서 OnClickListener가 트리거되지 않았습니다.

@OnClick(R.id.x_btn) void onXButtonClick(View v) { 
    if(getOnBackButtonClickListener() != null) { 
     getOnBackButtonClickListener().onClick(v); 
    } 
    } 

    @OnClick(R.id.back) void onBackButtonClick(View v) { 
    if(getOnXButtonClickListener() != null) { 
     getOnXButtonClickListener().onClick(v); 
    } 
    } 

을 가지고 있지만 그것과 같은

public class ForgotPasswordFragment extends BasePagerFragment 
     implements ForgotPasswordView, TextView.OnEditorActionListener, ActionBar.OnClickListener{ 

@Bind(R.id.action_bar) ActionBar actionBar; 


@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setRetainInstance(true); 


actionBar.setOnBackButtonClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      navigateTo(LoginActivity.class); 

     } 
    }); 



} 
+0

코드 끝에서 청취자를 전환하지 않았습니다. X를 누르면 onBackListener가 호출되고 Back을 클릭하면 Xlistener가 호출됩니다. – X3Btel

+0

무슨 뜻입니까? 온 클릭 '@OnClick (R.id.x_btn) 무효 onXButtonClick (보기 V) { 경우 (getOnBackButtonClickListener() = 널!) { getOnBackButtonClickListener() :. @ X3Btel는 – Adnan

+0

그는 당신이 당신의 청취자 교환이 코드의 의미 (V); } } @OnClick (R.id.back) 무효 onBackButtonClick (보기 V) { 경우 (getOnXButtonClickListener() = 널!) { getOnXButtonClickListener() 온 클릭 (V).; }' –

답변

0

: 여기

public class ActionBar extends LinearLayout { 

    private boolean showBackButton; 
    private boolean showXButton; 
    private boolean showHeader; 
    private String header = ""; 
    private OnClickListener onBackButtonClickListener; 
    private OnClickListener onXButtonClickListener; 

    @Bind(R.id.back) ImageView backButton; 
    @Bind(R.id.header) AutoResizeTextView headerText; 
    @Bind(R.id.x_btn) ImageView xButton; 

    public ActionBar(Context context) { 
    super(context); 
    initialize(context, null); 
    } 

    public ActionBar(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    initialize(context, attrs); 
    } 

    public ActionBar(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    initialize(context, attrs); 
    } 

    public ActionBar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
    super(context, attrs, defStyleAttr, defStyleRes); 
    initialize(context, attrs); 
    } 


    private void initialize(Context context, AttributeSet attributeSet) { 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View view = inflater.inflate(R.layout.action_bar_layout, this); 
    ButterKnife.bind(this, view); 

    if(attributeSet != null) { 
     TypedArray typedArray = 
      context.getTheme().obtainStyledAttributes(attributeSet, R.styleable.ActionBar, 0, 0); 

     try { 
     setHeader(typedArray.getString(R.styleable.ActionBar_header) == null ? 
      "" : typedArray.getString(R.styleable.ActionBar_header)); 
     setShowBackButton(typedArray.getBoolean(R.styleable.ActionBar_show_back_button, false)); 
     setShowXButton(typedArray.getBoolean(R.styleable.ActionBar_show_x_button, false)); 
     setShowHeader(typedArray.getBoolean(R.styleable.ActionBar_show_header, false)); 
     } finally { 
     typedArray.recycle(); 
     } 
    } 
    } 

    public boolean isShowBackButton() { 
    return showBackButton; 
    } 

    public void setShowBackButton(boolean showBackButton) { 
    this.showBackButton = showBackButton; 
    invalidate(); 
    requestLayout(); 
    } 

    public boolean isShowXButton() { 
    return showXButton; 
    } 

    public void setShowXButton(boolean showXButton) { 
    this.showXButton = showXButton; 
    invalidate(); 
    requestLayout(); 
    } 

    public boolean isShowHeader() { 
    return showHeader; 
    } 

    public void setShowHeader(boolean showHeader) { 
    this.showHeader = showHeader; 
    invalidate(); 
    requestLayout(); 
    } 

    public String getHeader() { 
    return header; 
    } 

    public void setHeader(String header) { 
    this.header = header; 
    invalidate(); 
    requestLayout(); 
    } 

    public OnClickListener getOnBackButtonClickListener() { 
    return onBackButtonClickListener; 
    } 

    public void setOnBackButtonClickListener(OnClickListener onBackButtonClickListener) { 
    this.onBackButtonClickListener = onBackButtonClickListener; 
    } 

    public OnClickListener getOnXButtonClickListener() { 
    return onXButtonClickListener; 
    } 

    public void setOnXButtonClickListener(OnClickListener onXButtonClickListener) { 
    this.onXButtonClickListener = onXButtonClickListener; 
    } 

    @Override protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    backButton.setVisibility(showBackButton ? VISIBLE : INVISIBLE); 
    xButton.setVisibility(showXButton ? VISIBLE : INVISIBLE); 
    headerText.setVisibility(showHeader ? VISIBLE : INVISIBLE); 
    headerText.setText(header); 
    } 

    @OnClick(R.id.x_btn) void onXButtonClick(View v) { 
    if(getOnBackButtonClickListener() != null) { 
     getOnBackButtonClickListener().onClick(v); 
    } 
    } 

    @OnClick(R.id.back) void onBackButtonClick(View v) { 
    if(getOnXButtonClickListener() != null) { 
     getOnXButtonClickListener().onClick(v); 
    } 
    } 
} 

내 조각 및 방법의 setOnBackButtonClickListener 호출입니다 : 여기

내 사용자 정의 클래스입니다 다음과 같아야합니다 :

@OnClick(R.id.back) void onXButtonClick(View v) { 
    if(getOnBackButtonClickListener() != null) { 
     getOnBackButtonClickListener().onClick(v); 
    } 
    } 

    @OnClick(R.id.x_btn) void onBackButtonClick(View v) { 
    if(getOnXButtonClickListener() != null) { 
     getOnXButtonClickListener().onClick(v); 
    } 
    } 
+0

Thx for help, solve. – Adnan

-1
Use @Onclick(R.id.action_bar) void methodNAme() 
{ 
//ToDo 
} 
관련 문제