2011-12-03 102 views
8

我正在做最簡單的onClick模型,無法啓動onClick方法。我知道這很簡單,而且我是Android新手。任何幫助表示讚賞。在Android上未調用onClick方法

package com.bordeloniphone.timeentry; 

import android.app.Activity; 
import android.os.Bundle; 

import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 

public class TimeEntryActivity extends Activity implements OnClickListener{ 
    /** Called when the activity is first created. */ 

    Button okButton; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     okButton = (Button) findViewById(R.id.btnOK); 
     okButton.setText(":)"); 
     okButton.setOnClickListener(this); 
     //setContentView(okButton); 

    } 

    public void onClick(View v) { 
     Log.d("TEST", "TEST"); 
     Toast.makeText(this, "TEST", Toast.LENGTH_SHORT).show(); 

    } 

} 

下面是main.xml中:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/btnOK" 
     android:layout_width="80dp" 
     android:layout_height="wrap_content" 
     android:text="OK" /> 

</LinearLayout> 
+0

我將您的確切代碼複製/粘貼到一個新項目中,並且工作正常。我得到了Toast和LogCat條目。是什麼讓你覺得它不起作用? – kabuko

+0

你的代碼對我來說工作正常..檢查清理完畢並構建你的項目.. – deepa

+0

是的,這段代碼適合我。也許你可以嘗試:Toast.makeText(TimeEntryActivity.this,「TEST」,Toast.LENGTH_SHORT).show(); – R4j

回答

6

取而代之的onClicklistener設置爲這個,試試這個方法:

okButton.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      Log.d("TEST", "TEST"); 
      Toast.makeText(this, "TEST", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
+2

他的方式完全有效。 – kabuko

+1

我從來沒有說過它不是。 – Chris

+0

如果您同意他的方式有效,那麼您的答案如何幫助他解決問題? – kabuko

4

你應該嘗試清潔您的項目或嘗試重新啓動您的Eclipse或任何其他編輯器,因爲它是有效的代碼,應該可以正常工作。

UPDATE:

此外,你應該檢查你的logcat,你得到的Log.d("TEST", "TEST");的輸出,因爲你的麪包似乎是在一個錯誤的方式來實現。

Toast.makeText(this, "TEST", Toast.LENGTH_SHORT).show(); // wrong 
Toast.makeText(Activity_name.this, "TEST", Toast.LENGTH_SHORT).show(); // correct 

在吐司使用this內監聽意味着你引用的監聽器,這確實不應該是這樣。您必須參考活動本身,以便更好地使用Activity_name.this

-2

嘗試使按鈕點擊

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<Button 
    android:id="@+id/btnOK" 
    android:layout_width="80dp" 
    android:layout_height="wrap_content" 
    android:text="OK" 
    android:clickable="true" /> 

+1

調用setOnClickListener已經做到了。 – lilbyrdie

7

牙多的焦慮和咬牙切齒之後,我想通了。我不得不刪除模擬器設備並添加一個新的,現在它就像一個冠軍。我很感謝每個想要幫助的人。

+0

哇。所以,如果有人在物理設備上遇到這個問題,它可能會變得有趣。實際上,這就是我來這裏的原因。我有一個點擊處理程序只是沒有被調用的情況下(許多工作之一)。清潔和安裝沒有幫助。我希望有更強大的解決方案。也許我認爲它錯了... – lilbyrdie

0

按鈕iv_StyleInspiration_Back =(按鈕)findViewById(R.id.iv_StyleInspiration_Back); iv_StyleInspiration_Back.setOnClickListener(this);

試試這個當你的onclick實現您的活動,你需要如上設置,使其對所有的控制工作,的onclick看起來應該如下

@Override 
    public void onClick(View pView) { 
     if (null != pView) { 
      switch (pView.getId()) { 
       case R.id.iv_StyleInspiration_Back: 
        //do what you want 
            break; 
       default: 
        break; 
      } 
     } 
    } 
-1

檢查三個步驟:

  1. 通過正確的ID找到按鈕
  2. 將按鈕鏈接到偵聽器。 (添加actionListener)
  3. 您在實現actionListener類的情況下指定此按鈕的條件。