#android #xml #onclicklistener
#Android #xml #onclicklistener
Вопрос:
Мой OnClickListener
никогда не срабатывает, я пытался создать прослушиватель только для этой кнопки, тогда, как это сейчас реализовано OnClickListener
. 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;
}
}
}
Комментарии:
1. Вы получаете сообщение «я здесь» на вашем лог-коте?
2. Я подозреваю, что вы не вызывали метод
super
класса в дочернем классе3. @PeterChaula Я тоже, это было первое, что я проверил. Я вызвал его.
4. Я попробовал ваш код в пустом действии,
drawer_button
onClick работает так, как ожидалось.5. @MohanadMohie Я использовал его уже 6 месяцев в проектах to, но в этом конкретном он не работает =).
Ответ №1:
Просматривая ваш XML-файл, у вас есть только define ImageButton, нет TextView для toolbarTv, а также нет метода click, который определен для оператора switch.
Попробуйте
<TextView
android:id="@ id/toolbarTv"
android:layout_width="35dp"
android:layout_height="26dp"
android:id="@ id/toolbarTv"
android:onClick="onClick"
android:clickable="true"/>
Комментарии:
1. Я удалил TextView из xml, потому что stackowerflow говорил мне, что у меня слишком много кода, но в xml есть Tv, и у меня есть переключатель для Iv и Tv.
2. добавили ли вы android: onClick=»onClick» android:clickable =»true» как в ImageButton, так и в TextView?
3. Да, я пытался добавить только одну строку, и оба они вместе.
4. можете ли вы вставить TextView из xml для toolbarTv в комментарии?
5. Вот и все <TextView android:text=»TextView» android:layout_width=»wrap_content» android:layout_height=»wrap_content» android:layout_marginLeft=»20dp» android:layout_margininstart=»20dp» android: id= «@ id/toolbarTv» android:layout_centerVertical=»true» android:layout_toRightOf=»@ id/ drawer_button» android:layout_toEndOf=»@ id / drawer_button» android:textColor=»@android: color / white» />
Ответ №2:
Вместо того, чтобы устанавливать прослушиватель щелчков на ImageButton, добавьте его в parent RelativeLayout, потому что здесь parent перехватывает событие click.
Комментарии:
1. Если я это сделаю, у меня будет интерактивная панель инструментов, но мне нужно только нажать кнопку
Ответ №3:
используйте руководство по ссылке Butter Knife и GitHub 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'
прежде чем
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);
}
Ответ №4:
Добавьте эту строку cod в свой 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. вы добавили его в кнопку изображения?
2. @hankTheCowDog Я не думаю, что это хорошая идея. Вы делаете одно и то же дважды
android:onClick="onClick"
. Если вы выбираете интерфейс, тогда используйте его. Если вы выберете объявление в xml, тогда придерживайтесь исключительно этого3. Да, я добавил его в ImageButton
4. Я вижу, что на нем написано android:clickable =»true», но самый простой способ определить, когда нажат вид, и он создан в XML, — это использовать приведенную выше строку кода. При этом onClick в «» является именем метода, который вы хотите вызвать. Просто так получилось, что метод, который он хочет вызвать, называется onClick
5. @PeterChaula Я понимаю это, но я просто пытаюсь это исправить (предпочитаю делать это в коде), xml onClick на самом деле не вариант, я попробовал это, просто чтобы понять, будет ли это работать таким образом.