4

我有一個按鈕,當我點擊一個對話框出現。問題是,setOnClickListener沒有響應我的按鈕。按鈕OnClickListener不工作

這裏是我的Java代碼:

Button b1 = (Button) findViewById(R.id.button1); 
    b1.setOnClickListener(usage); 

    b2 = (Button) findViewById(R.id.button2); 
    b2.setOnClickListener(price); 

    b3 = (Button) findViewById(R.id.button3); 
    b3.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      System.out.println("Button3"); 
      mainDialog3 = new Dialog(Advice.this); 
      mainDialog3.setContentView(R.layout.fuel); 
      mainDialog3.setCancelable(true); 

      mainDialog3.show(); 
      Window window = mainDialog3.getWindow(); 
      window.setLayout(LayoutParams.FILL_PARENT, 
        LayoutParams.WRAP_CONTENT); 

     } 
    }); 


private View.OnClickListener usage = new View.OnClickListener() { 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     System.out.println("Button1"); 
     Toast.makeText(getApplicationContext(), "Button 1", 
       Toast.LENGTH_LONG).show(); 
     mainDialog1 = new Dialog(Advice.this); 
     mainDialog1.setContentView(R.layout.usage); 
     mainDialog1.setCancelable(true); 

     mainDialog1.show(); 
     Window window = mainDialog1.getWindow(); 
     window.setLayout(LayoutParams.FILL_PARENT, 
       LayoutParams.WRAP_CONTENT); 

    } 
}; 

private View.OnClickListener price = new View.OnClickListener() { 
    public void onClick(View v) { 
     System.out.println("Button2"); 
     mainDialog2 = new Dialog(Advice.this); 
     mainDialog2.setContentView(R.layout.price); 
     mainDialog2.setCancelable(true); 

     mainDialog2.show(); 
     Window window = mainDialog2.getWindow(); 
     window.setLayout(LayoutParams.FILL_PARENT, 
       LayoutParams.WRAP_CONTENT); 

    } 

}; 

問題是與按鈕1(b1)。其餘的按鈕(b2,b3)工作得很好。下面是我的XML:

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_alignRight="@+id/button7" 
    android:text="Edit" /> 

<Button 
    android:id="@+id/button2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/button3" 
    android:layout_alignLeft="@+id/button1" 
    android:text="Edit" /> 

<Button 
    android:id="@+id/button3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignBottom="@+id/textView8" 
    android:layout_alignLeft="@+id/button2" 
    android:text="Edit" /> 
+1

愚蠢的問題,但你確定你點擊的按鈕是button1?好像你在RelativeLayout中有多個按鈕都具有相同的文本(「編輯」)。是否有可能另一個按鈕位於你認爲是button1的頂部,從而阻止它被點擊? – brianestey

+0

是的,我檢查沒有其他按鈕重疊按鈕。相反,我添加了一個新的按鈕,並檢查,但仍然是同樣的問題。 – Droid

+0

嘿,非常感謝你,我不知道問題在哪裏,但它現在起作用了。 – Droid

回答

1

你並不需要在代碼中手動設置點擊收聽。最簡單的方法是在XML中添加回調。

像這樣:

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_alignRight="@+id/button7" 
    android:onClick="foo" 
    android:text="Edit" /> 

如果你使用Eclipse的Android工具,你可以直接在XML編輯器中設置該屬性。然後你在你的代碼中定義一個以Click屬性命名的函數,它將被自動調用。

public void foo(View oView) 
{ 
    Button cklicked ... 
} 

您還可以設置一個點擊監聽,動態,但是這個你,如果你動態地創建按鈕,這樣只需要:

ImageButton button = (ImageButton) findViewById(R.id.list_manager_add); 
    button.setOnClickListener(new OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      button pressed... 
     } 
    }); 
-8

嘗試b1.setOnClickListener(usage); 而不是b1.setOnClickListener(usage);在你的代碼,將工作.. brother

+2

有什麼區別? –

+0

試着吃,而不是把食物放在你的嘴裏? –