2016-11-30 56 views
0

我有自定義類(ActionBar.class),我用OnClickListener(OnBackButtonClickListener)實現了自定義ActionBar組件。當我在片段中調用此方法時,它不會被觸發。OnClickListener沒有在片段內部觸發

這裏是我的自定義類:

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電話:

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

在你的代碼的最後didnt您切換listeners-如果X按下您呼叫onBackListener,如果單擊後退是您所呼叫Xlistener – X3Btel

+0

你是什麼意思? @ X3Btel – Adnan

+0

他的意思是在此代碼你換你的聽衆。 '@OnClick(R.id.x_btn)無效onXButtonClick(視圖v){ 如果(!getOnBackButtonClickListener()= NULL){ getOnBackButtonClickListener()的onClick (ⅴ); }} @OnClick(R.id.back)無效onBackButtonClick(視圖v){ 如果(getOnXButtonClickListener()!= NULL){ getOnXButtonClickListener()的onClick(V)。 }' –

回答

0

你有

@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); 
    } 
    } 

但它看起來像它應該是:

@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求助,解決了。 – Adnan

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