2017-02-06 10 views
-1

я нашел странный вопрос с компоновщика нижеКнопка Не Получая событие OnClick

<LinearLayout> 

    <LinearLayout 
     android:id="@+id/btn_next" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:gravity="center_vertical" 
     android:orientation="horizontal"> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      app:srcCompat="@drawable/ic_back_right"/> 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="@dimen/btn_height" 
      android:background="@null" 
      android:text="@string/next" 
      android:textColor="@color/colorPrimary" 
      android:textSize="15sp"/> 

    </LinearLayout> 
</LinearLayout> 

Я добавил нажмите слушателем, как показано ниже:

mViewDataBinding.btnNext.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { //show toast} 
}); 

Но когда я нажимаю на изображение просмотра тост Doesnt показать, но когда я использую схему ниже, она работает как ожидалось

<LinearLayout> 

    <LinearLayout 
     android:gravity="bottom|center" 
     android:id="@+id/btn_prev" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="400dp" 
     android:layout_width="wrap_content" 
     android:orientation="horizontal"> 

     <ImageView 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:src="@drawable/tab_bankd_selected" /> 

     <TextView 
      android:background="@android:color/holo_green_dark" 
      android:layout_height="wrap_content" 
      android:layout_marginRight="20dp" 
      android:layout_width="wrap_content" 
      android:padding="10dp" 
      android:text="previous" 
      android:textAllCaps="true" 
      android:textColor="@color/colorPrimary" 
      android:textSize="15sp" 
      android:textStyle="bold"/> 
    </LinearLayout> 
</LinearLayout> 

Когда я нажимаю на текстовое изображение, оно работает. Может кто-нибудь, пожалуйста, скажите мне, что мне не хватает, и что я должен сделать, чтобы он работал. Reasone Я использую такой макет, потому что я использую SVG-изображения. Я уже пробовал сделать кнопку clickable: true. Другое дело, что я не в состоянии встать, так это то, как TextView вместо Button может разбудить. Хотя кнопка выдвигается TextView. Пожалуйста, помогите

+2

Ваш вопрос не совсем Чисто. –

+0

с первым набором 'Button id' –

+0

Добавить эту недвижимость в LinearLayout в xml layout android: clickable =" true " android: focusable =" true " android: focusableInTouchMode =" true " –

ответ

1

Ваш код показывает mViewDataBinding.btnNext, но нет идентификатора, назначенного вашей кнопке ... неясно, как вы получаете его ссылку в mViewDataBinding.btnNext. Наверное, вот в чем проблема.

Возможно, вы попытаетесь добавить идентификатор и получить его ссылку в коде с помощью findViewById(), иначе вы можете определить метод, который нужно вызывать при нажатии кнопки в самом макете с использованием атрибута .

Оба способа описаны ниже с примерами кода:

  • onClick атрибут:

    XML:

    <Button 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:onClick="onButtonClicked" 
        android:text="Test" /> 
    

    Java (в Activity, что эта схема надувается в):

    public void onButtonClicked(View view) { 
        Toast.makeText(this, "Test", Toast.LENGTH_SHORT).show(); 
    } 
    
  • setOnClickListener() атрибут:

    XML:

    <Button 
        android:id="@+id/btn_test" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:onClick="onButtonClicked" 
        android:text="Test" /> 
    

    Java (вероятно, в onCreate() из Activity, что эта схема надувается в):

    findViewById(R.id.btn_button).setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         Toast.makeText(MainActivity.this, "Test", Toast.LENGTH_SHORT).show(); 
        } 
    }); 
    
+0

btn_next - это идентификатор линейного макета, который содержит кнопку. Вместо findViewById я использую библиотеку привязки данных. https://developer.android.com/topic/libraries/data-binding/index.html. Вы даже можете попробовать с обычным методом findViewById.Это не работает –

+1

Вы попробовали очистить проект и здание снова? : P Иногда это помогает. –

+0

Да много раз. Проблема заключалась в том, что представление Button потребляет событие onClick в этом регионе. Кажется, что Button имеет неявный onClick. –

Смежные вопросы