2010-08-05 99 views
0

我在應用程序中有3-4個活動,並且它們都有一些很好的事件偵聽器。 但是隻有在一項活動中,我根本無法讓事件處理工作。 我試過這個線程的解決方案:http://www.anddev.org/view-layout-resource-problems-f27/ontouch-not-called-t16578.html 它不適合我。我嘗試從Java代碼手動爲ImageViews設置OnClickListeners,從XML中android:onClick。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

你的事件監聽是吸收所有DOWN事件。嘗試讓它返回false而不是真正的,所以子視圖也有機會作出反應,因爲我認爲onClick正確觸發子視圖需要註冊一個連續的DOWN然後UP(只是一個UP是不夠的;想想滑動你的手指從一個按鈕到另一個按鈕然後釋放;既不是這意味着用戶想取消指示)。

+0

Thx for reply。 我明白你的觀點,但問題在於我的活動根本沒有註冊點擊和觸摸事件。它永遠不會進入onTouch()和onClick()函數(我在調試模式下進行檢查)。 我不需要Activity.onTouch(),我只是想檢查事件是否在那裏處理。而事實並非如此。 – 2010-08-06 01:42:19

+0

您的keyboard_letters視圖不可見,但可點擊;它似乎有可能重疊您的按鈕並防止點擊發射。嘗試刪除它和觸摸事件處理程序,看看你的按鈕是否觸發? 我唯一能想到的其他事情是,NoteView2沒有提供源代碼,它可能會不恰當地設置其可觸摸區域並阻止其他視圖獲得焦點。 (更一般地,試着從兩個按鈕和兩個按鈕點擊監聽器的最小布局和活動開始,一次添加一個視圖/方法,直到找到罪魁禍首)。 – 2010-08-06 15:36:31

+0

Thx再一次爲您提供幫助。我將從頭開始構建佈局,並在此處發佈結果。 – 2010-08-07 11:02:24