ImageButton onClick从未触发过

时间:2016-10-16 17:47:31

标签: android xml onclicklistener

我的OnClickListener永远不会被触发,我只尝试为此按钮创建侦听器,然后现在已实现OnClickListener。 {Child}在子类中调用initToolbarAndDrawerWithReadableName方法为this.initToolbarAndDrawerWithReadableName。我做错了什么?

Toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/end"
    android:gravity="center|end"
    android:id="@+id/auth_toolbar"
    android:theme="@style/AppTheme">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp">

        <ImageButton
            android:layout_width="35dp"
            android:layout_height="26dp"
            android:id="@+id/drawer_button"
            android:layout_centerVertical="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:background="@drawable/menu_active"
            android:scaleType="fitXY"
            android:clickable="true"/>
    </RelativeLayout>
</android.support.v7.widget.Toolbar>

初始化工具栏

 protected void initToolbarAndDrawerWithReadableName(String title) {

        toolbarTv = (TextView)findViewById(R.id.toolbarTv);
        toolbarTv.setText(title);
        toolbarTv.setOnClickListener(this);

        View child = (View)getLayoutInflater().inflate(R.layout.drawer_header, null);

        nvDrawer = (NavigationView) findViewById(R.id.nvView);
        nvDrawer.addHeaderView(child);

        mToolbar = (Toolbar) findViewById(R.id.auth_toolbar);
        setSupportActionBar(mToolbar);

        mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        setupDrawerContent(nvDrawer);

        imageButton = (ImageButton) mToolbar.findViewById(R.id.drawer_button);
        imageButton.setOnClickListener(this);
    }

的OnClick:

 @Override
    public void onClick(View v) {
        Log.d("click","i am here");
        switch (v.getId()){
            case R.id.drawer_button:{
                mDrawer.openDrawer(GravityCompat.START);
                break;
            }
            case R.id.toolbarTv:{
                mDrawer.openDrawer(GravityCompat.START);
                break;
            }
        }
    }

4 个答案:

答案 0 :(得分:1)

将这行鳕鱼添加到xml中。它将调用每次按下按钮时所做的onClick方法

android:onClick="onClick"

尝试让你的xml看起来像这样

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/end"
    android:gravity="center|end"
    android:id="@+id/auth_toolbar"
    android:theme="@style/AppTheme">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp">
    <ImageButton
        android:layout_width="35dp"
        android:layout_height="26dp"
        android:id="@+id/drawer_button"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:background="@drawable/menu_active"
        android:onClick="onClick"
        android:scaleType="fitXY"
        android:clickable="true"/>
</RelativeLayout>
</android.support.v7.widget.Toolbar>

确保onClick类在活动中,但不在任何其他活动中。前

main activity{

create(){}

other(){}

onClick(){}

otherOther(){}

}

另外,注释掉现在声明监听器的方法,看它是否有效,它对我有用

答案 1 :(得分:1)

查看您的xml文件,您只定义 ImageButton toolbarTv 没有TextView,也没有为switch语句定义的click方法。

<强>尝试

 <TextView
            android:id="@+id/toolbarTv"
            android:layout_width="35dp"
            android:layout_height="26dp"
            android:id="@+id/toolbarTv"
            android:onClick="onClick"
            android:clickable="true"/>

答案 2 :(得分:0)

不是将Click侦听器设置为ImageButton,而是将其添加到父RelativeLayout,因为此处父级正在拦截click事件。

答案 3 :(得分:0)

使用Butter Knife Link TutorialGitHub Simple

1)将此添加到您的依赖项

       compile 'com.jakewharton:butterknife:8.4.0'
       apt 'com.jakewharton:butterknife-compiler:8.4.0'

2)将此添加到build.gradle中的依赖项

       apply plugin: 'com.android.library'
       apply plugin: 'com.jakewharton.butterknife'

befor

       apply plugin: 'android-apt'

添加

       apply plugin: 'com.android.library'
       apply plugin: 'com.jakewharton.butterknife'

3)在你的活动中添加它

      @BindView(R.id.drawer_button) ImageButton drawer_button;

4)然后添加

     @OnClick(R.id.drawer_button)
      public void openDrawer() {
       mDrawer.openDrawer(GravityCompat.START);
       }