2011-12-03 33 views
8

Tôi đang làm các mô hình onClick đơn giản nhất và không thể có phương thức onClick để kích hoạt. Tôi biết nó là một cái gì đó đơn giản, và tôi mới đến với Android. Bất kỳ trợ giúp được đánh giá cao.phương thức onClick không được gọi trên Android

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(); 

    } 

} 

Đây là 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

Tôi sao chép/dán mã chính xác của bạn vào một dự án mới và nó hoạt động. Tôi nhận được bánh mì nướng và mục nhập LogCat. Điều gì khiến bạn nghĩ rằng nó không hoạt động? – kabuko

+0

Mã của bạn hoạt động tốt cho tôi..Kiểm tra sau khi làm sạch và xây dựng dự án của bạn .. – deepa

+0

Có, mã này hoạt động cho tôi. Có lẽ bạn có thể thử: Toast.makeText (TimeEntryActivity.this, "TEST", Toast.LENGTH_SHORT) .show(); – R4j

Trả lời

6

Thay vì thiết lập OnClickListener vào đó, hãy thử cách này:

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

Cách của anh ấy là hoàn toàn hợp lệ. – kabuko

+1

Tôi chưa bao giờ thực sự nói là không. – Chris

+0

Nếu bạn đồng ý theo cách của mình là hợp lệ, thì câu trả lời của bạn sẽ giúp bạn như thế nào? – kabuko

4

Bạn nên cố gắng dọn dẹp dự án của bạn hoặc cố gắng khởi động lại Eclipse của bạn hoặc bất kỳ Trình chỉnh sửa nào khác mà bạn đang sử dụng vì nó là một mã hợp lệ và sẽ hoạt động tốt.

UPDATE:

Ngoài ra, bạn nên kiểm tra Logcat của bạn, bạn đang nhận được đầu ra của Log.d("TEST", "TEST"); vì Toast của bạn dường như được thực hiện một cách sai lầm.

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

Sử dụng this trong Toast bên Listener có nghĩa là bạn đang tham chiếu Listener, mà thực sự không phải là trường hợp. Bạn phải tham chiếu đến Hoạt động để sử dụng tốt hơn Activity_name.this.

-2

thử làm cho nút bấm

<?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

Gọi setOnClickListener đã thực hiện điều này. – lilbyrdie

7

Sau nhiều cảm giác lo lắng và nghiến răng, I figured it out. Tôi đã phải xóa các thiết bị mô phỏng và thêm một mới và bây giờ nó hoạt động như một nhà vô địch. Tôi đánh giá cao mọi người đang cố giúp đỡ.

+0

Chà. Vì vậy, nếu ai đó có vấn đề này trên một thiết bị vật lý, nó có thể trở nên thú vị. Đó là lý do tại sao tôi ở đây, thực sự. Tôi có một trường hợp của một trình xử lý nhấp chuột không được gọi (một trong số nhiều công việc đó). Làm sạch và cài đặt không giúp được gì. Tôi đã hy vọng cho các giải pháp mạnh mẽ hơn. Có lẽ tôi đang giữ nó sai ... – lilbyrdie

0

Nút iv_StyleInspiration_Back = (Button) findViewById (R.id.iv_StyleInspiration_Back); iv_StyleInspiration_Back.setOnClickListener (this);

Hãy thử điều này Bất cứ khi nào bạn thực hiện onclick vào các hoạt động của bạn, bạn cần phải thiết lập như trên để làm cho nó làm việc cho tất cả các điều khiển và onclick nên trông giống như sau

@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

Kiểm tra ba bước:

  1. tìm nút theo id chính xác
  2. liên kết nút với người nghe. (thêm actionListener)
  3. bạn chỉ định điều kiện cho nút này trong trường hợp triển khai lớp actionListener.
Các vấn đề liên quan