2010-08-05 2 views
0

У меня есть 3-4 действия в приложении, и у всех из них есть прослушиватели событий, которые работают хорошо. Однако только при одном действии я просто не могу заставить обработку событий работать. Я пробовал решение этой темы: http://www.anddev.org/view-layout-resource-problems-f27/ontouch-not-called-t16578.html Это не работает для меня. Я попытался вручную установить OnClickListeners для ImageViews из java-кода, android: onClick из XML.onClick не срабатывает на ImageView

Похоже, что какой-либо другой компонент обрабатывает все события, или моя активность не имеет разрешения на обработку событий. Должен ли я помещать что-то в AndroidMainfest.xml для своей активности, которая позволяет обрабатывать события?

Надежда кто-то есть идея, что я должен попробовать, вот код:

активность:

package com.renegade.begining; 

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 

import android.view.MotionEvent; 
import android.view.View; 
import android.widget.ImageView; 


public class NotesOnStaff extends Activity{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     setContentView(R.layout.notes_on_staff); 


    /*  NoteView2 note=(NoteView2)findViewById(R.id.note_red); 


     Bitmap bm=BitmapFactory.decodeResource(getResources(), R.drawable.note_red); 
     note.setImage(bm); 
    */ 



    } 


    public void onClickEventBtn1(View v) { 
     // TODO Auto-generated method stub 
     ImageView keyboard_letter=(ImageView)findViewById(R.id.keyboard_letters); 
     keyboard_letter.setVisibility(View.INVISIBLE); 
    } 

    public void onClickEventBtn2(View v) { 
     // TODO Auto-generated method stub 
     ImageView keyboard_letter=(ImageView)findViewById(R.id.keyboard_letters); 
     keyboard_letter.setVisibility(View.VISIBLE); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
     ImageView keyboard_letter=(ImageView)findViewById(R.id.keyboard_letters); 
      keyboard_letter.setVisibility(View.VISIBLE); 
     return true; 
     case MotionEvent.ACTION_UP: 
     return false; // something else 
       default: 
         return false;// all others 
     } 
    } 


} 

Планировка:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/notes_on_staff_layout" 
    android:background="@drawable/background_ver" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 


      <ImageView 
       android:id="@+id/notes_keyboard" 
      android:src="@drawable/keyboard" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:layout_centerHorizontal="true" 
      android:layout_marginBottom="20dip" 

     android:clickable="true" android:focusable="true"/> 

     <ImageView 
      android:id="@+id/btn_hide" 
      android:src="@drawable/btnhide" 
      android:layout_alignParentLeft="true" 
      android:layout_marginTop="40dip" 
      android:layout_marginLeft="10dip" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:onClick="onClickEventBtn1" 
     android:clickable="true" android:focusable="true"/> 

     <ImageView 
     android:id="@+id/btn_show" 
      android:layout_alignBottom="@id/btn_hide" 
      android:layout_toRightOf="@id/btn_hide" 
     android:src="@drawable/btnshow" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:onClick="onClickEventBtn2" 
      android:clickable="true" android:focusable="true"/> 



     <ImageView 

      android:id="@+id/staff" 
      android:src="@drawable/staff" 
      android:layout_below="@id/btn_hide" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="0dip" 
      android:layout_above="@id/notes_keyboard" 


     /> 


     <com.renegade.begining.NoteView2 
     android:id="@+id/note_red" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 


      />  


     <ImageView 
     android:id="@+id/keyboard_letters" 
      android:layout_alignLeft="@+id/notes_keyboard" 
      android:layout_alignBottom="@+id/notes_keyboard" 
      android:layout_marginBottom="10dip" 
      android:visibility="invisible" 
     android:src="@drawable/keyboard_letters" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
      android:clickable="true" android:focusable="true"/> 


</RelativeLayout> 

ответ

4

Ваш EventListener поглощает все события ВНИЗ. Попытайтесь вернуть его false вместо true, поэтому у subviews также есть шанс отреагировать, так как я думаю, что для onClick для правильного запуска детского вида необходимо зарегистрировать непрерывное ВНИЗ, а затем UP (просто UP недостаточно, подумайте о скользящем ваш палец от кнопки на другой, затем отпустите, ни один из огней, поскольку это указывает, что пользователь хочет отменить.)

+0

Thx для ответа. Я вижу вашу точку зрения, но проблема в том, что моя активность не регистрирует события щелчка и касания вообще. Он никогда не входит в функции onTouch() и onClick() (я проверил это в режиме отладки). Мне вообще не нужна функция Activity.onTouch(), я просто хотел проверить, будет ли там обработано событие. И это не так. –

+0

Ваше представление keyboard_letters невидимо, но доступно для кликов; возможно, что он перекрывает ваши кнопки и предотвращает их стрельбу. Попробуйте удалить его и обработчик события касания и посмотреть, стреляют ли ваши кнопки? Единственное, что я могу придумать, это отсутствие источника для NoteView2, который, возможно, неправильно настраивает его осязаемую область и не дает другим взглядам получить фокус. (В более общем смысле, попробуйте начать с минимальной компоновки и активности только двух кнопок и двух щелчков мышью, а также добавлять просмотры/методы по одному, пока вы не найдете виновника). –

+0

Thx еще раз за вашу помощь. Я построю макет с нуля и опубликую результаты здесь. –

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

  • Нет связанных вопросов^_^