2012-02-17 109 views
1

我已經編寫了一個代碼,用於在Android中使用按鈕點擊事件來輸入一些文本。它根本不工作。沒有給出任何錯誤或例外,我沒有得到它出錯的地方。Onclick事件不能在Android中工作

public void onCreate(Bundle savedInstanceState) 
{ 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    //select_btn = (Button) findViewById(R.id.ok); 
    //home_btn = (Button) findViewById(R.id.home); 
    et = (EditText) findViewById(R.id.entry); 
    et.setText("", TextView.BufferType.EDITABLE); 
    b = new Bundle(); 

    for (int i = 0; i < mybtn.length; i++) { 
     String btnid = "btn" + i; 
     int resid = getResources().getIdentifier(btnid, "id", 
       getPackageName()); 
     mybtn[i] = (Button) findViewById(resid); 
     mybtn[i].setOnClickListener(this);   
    }  
    //tts.speak("hello wolrd",TextToSpeech.QUEUE_FLUSH,null); 
    et.setText("hello man", TextView.BufferType.EDITABLE);  
} 

public void onClick(View v) 
{ 

    //while(tts.isSpeaking()); 
    et.setText("hello android", TextView.BufferType.EDITABLE); 
    String s=null; 
    s = ((Button)v).getText().toString().trim(); 
    //tts.speak("hello google",TextToSpeech.QUEUE_FLUSH,null);  
} 

這裏是main.xml中:

<EditText 
    android:id="@+id/entry" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="10dp" 
    android:focusable="false" 
    android:focusableInTouchMode="false" 
    android:inputType="phone" 
    android:maxLength="20" /> 

<TableLayout 
    android:id="@+id/table" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/entry" 
    android:layout_marginTop="20dp" 
    android:stretchColumns="*" > 

    <TableRow> 

     <Button 
      android:id="@+id/btn0" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight=".25" 
      android:clickable="true" 
      android:focusable="true" 
      android:focusableInTouchMode="true" 
      android:gravity="center" 
      android:text="@string/zero" 
      android:textSize="10pt" 
      android:visibility="visible" /> 

     <Button 
      android:id="@+id/btn1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight=".25" 
      android:clickable="true" 
      android:focusable="true" 
      android:focusableInTouchMode="true" 
      android:gravity="center" 
      android:text="@string/one" 
      android:textSize="10pt" 
      android:visibility="visible" /> 

     <Button 
      android:id="@+id/btn2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight=".25" 
      android:clickable="true" 
      android:focusable="true" 
      android:focusableInTouchMode="true" 
      android:gravity="center" 
      android:text="@string/two" 
      android:textSize="10pt" 
      android:visibility="visible" /> 

     <Button 
      android:id="@+id/btn3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight=".25" 
      android:clickable="true" 
      android:focusable="true" 
      android:focusableInTouchMode="true" 
      android:gravity="center" 
      android:text="@string/three" 
      android:textSize="10pt" 
      android:visibility="visible" /> 
    </TableRow> 

    <View 
     android:layout_height="2dip" 
     android:background="#FF909090" /> 

    <TableRow> 

     <Button 
      android:id="@+id/btn4" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight=".25" 
      android:clickable="true" 
      android:focusable="true" 
      android:focusableInTouchMode="true" 
      android:gravity="center" 
      android:text="@string/four" 
      android:textSize="10pt" 
      android:visibility="visible" /> 

     <Button 
      android:id="@+id/btn5" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight=".25" 
      android:clickable="true" 
      android:focusable="true" 
      android:focusableInTouchMode="true" 
      android:gravity="center" 
      android:text="@string/five" 
      android:textSize="10pt" 
      android:visibility="visible" /> 

     <Button 
      android:id="@+id/btn6" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight=".25" 
      android:clickable="true" 
      android:focusable="true" 
      android:focusableInTouchMode="true" 
      android:gravity="center" 
      android:text="@string/six" 
      android:textSize="10pt" 
      android:visibility="visible" /> 

     <Button 
      android:id="@+id/btn7" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight=".25" 
      android:clickable="true" 
      android:focusable="true" 
      android:focusableInTouchMode="true" 
      android:gravity="center" 
      android:text="@string/seven" 
      android:textSize="10pt" 
      android:visibility="visible" /> 
    </TableRow> 

    <View 
     android:layout_height="2dip" 
     android:background="#FF909090" /> 

    <TableRow> 

     <Button 
      android:id="@+id/btn8" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight=".25" 
      android:clickable="true" 
      android:focusable="true" 
      android:focusableInTouchMode="true" 
      android:gravity="center" 
      android:text="@string/eight" 
      android:textSize="10pt" 
      android:visibility="visible" /> 

     <Button 
      android:id="@+id/btn9" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight=".25" 
      android:clickable="true" 
      android:focusable="true" 
      android:focusableInTouchMode="true" 
      android:gravity="center" 
      android:text="@string/nine" 
      android:textSize="10pt" 
      android:visibility="visible" /> 

     <Button 
      android:id="@+id/btn10" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight=".25" 
      android:clickable="true" 
      android:focusable="true" 
      android:focusableInTouchMode="true" 
      android:gravity="center" 
      android:text="@string/delete" 
      android:textSize="10pt" 
      android:visibility="visible" /> 

     <Button 
      android:id="@+id/btn11" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight=".25" 
      android:clickable="true" 
      android:focusable="true" 
      android:focusableInTouchMode="true" 
      android:gravity="center" 
      android:text="@string/finish" 
      android:textSize="10pt" 
      android:visibility="visible" /> 
    </TableRow> 
</TableLayout> 

<View 
    android:id="@+id/view1" 
    android:layout_width="fill_parent" 
    android:layout_height="90dp" 
    android:layout_below="@id/table" > 
</View> 
+0

顯示你的xml代碼 – 2012-02-17 11:02:55

+0

請在這裏發佈你的整個代碼只有java文件 – 2012-02-17 11:04:44

+0

你有沒有在類上實現onclicklistner? – 2012-02-17 11:05:12

回答

1

* UPDATE *

噢,對不起......

我認爲你必須與你的聽衆有問題註冊,請試試這個:

b=findViewById(R.id.btnid); 
b.setOnClickListener(this); 

b.setOnClickListener(new OnClickListener(){ 
    public void onClick(View view) { 
     et.setText("hello android", TextView.BufferType.EDITABLE); 
     String s=null; 
     s = ((Button)v).getText().toString().trim(); 
    } 

}); 
+0

哈利我想捕獲單擊按鈕的事件,但不是編輯文本 – rajesh 2012-02-17 11:15:56

+0

然後將監聽器附加到按鈕。 – Luke 2012-02-17 11:24:05

+0

我已經做到了,你可以從代碼中看到它,但它不起作用 – rajesh 2012-02-17 11:36:27

0

在佈局中添加:

android:onClick="onClick" 

到要處理單擊按鈕...

+0

我想使用onlciklistener方法,請告訴我上面的方法有什麼問題。因爲我會實現一個佈局,其中有很多buttons.so我更喜歡以上方法 – rajesh 2012-02-17 11:32:51

+0

你已經寫了這個:'mybtn [i] .setOnClickListener(this);''this''這裏指Activity!不是一個onclickListener – 2012-02-17 11:39:52

+0

但我實現onclicklistener,所以它必須工作,我已經看到了這麼多的地方實現這種方式 – rajesh 2012-02-17 11:44:19

0

您正在閱讀的點擊的按鈕文本字符串變量,但不使用它。 這應該是更象你想達到什麼目的:

public void onClick(View v) 
{ 
    // et.setText("hello android", TextView.BufferType.EDITABLE); 
    String s=null; 
    s = ((Button)v).getText().toString().trim(); 


    et.setText(s, TextView.BufferType.EDITABLE); 
} 
+0

我已將文字設置爲「hello world」。這也是不正常的工作,忘記字符串。 – rajesh 2012-02-17 11:31:19

0

確保您的活動是像下面

public class MyActivity extends Activity implements OnClickListener 
{ 
Button b; 
public void onCreate(Bundle savedInstanceState) 
{ 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    //select_btn = (Button) findViewById(R.id.ok); 
    //home_btn = (Button) findViewById(R.id.home); 
    et = (EditText) findViewById(R.id.entry); 
    et.setText("", TextView.BufferType.EDITABLE); 

    b=findViewById(R.id.btnid); 
    b.setOnClickListener(this); 
    b = new Bundle(); 

    for (int i = 0; i < mybtn.length; i++) { 
     String btnid = "btn" + i; 
     int resid = getResources().getIdentifier(btnid, "id", 
       getPackageName()); 
     mybtn[i] = (Button) findViewById(resid); 
     mybtn[i].setOnClickListener(this);   
    }  
    //tts.speak("hello wolrd",TextToSpeech.QUEUE_FLUSH,null); 
    et.setText("hello man", TextView.BufferType.EDITABLE);  
} 

public void onClick(View v) 
{ 
    if(v.equals(b)) 
{ 
    //while(tts.isSpeaking()); 
    et.setText("hello android", TextView.BufferType.EDITABLE); 
    String s=null; 
    s = ((Button)v).getText().toString().trim(); 
    //tts.speak("hello google",TextToSpeech.QUEUE_FLUSH,null);  
} 
} 
} 
+0

我沒有得到您的代碼。在onclick方法v.equals(b)中需要什麼比較。我以一般的方式使用它 – rajesh 2012-02-17 11:47:37

+0

沒有v.equals(b)也適用,如果你在你的活動中爲一個視圖編寫onclick監聽器,否則你必須檢查哪個視圖被點擊 – koti 2012-02-17 12:44:15

0

試試這個

 { 
     ............ 
     int[] mybtn = new int[] {R.id.btn1,......R.id.btn11}; 
     for(int i=0; i<mybtn.length; i++) { 
     Button b = (Button) findViewById(mybtn[i]); 
     b.setOnClickListener(this); 
     } 
3

在你的代碼被傳遞活動進入setOnClickListener()方法mybtn[i].setOnClickListener(this)其中this是對您的活動的參考。 setOnClickListener()期望作爲參數View.OnClickListener接口。這是任何實現接口的對象。有兩種方法可以做到這一點。

1)創建一個匿名對象,例如

mybtn[i].setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     ... your code here 
    } 
    }); 

OnClickListener()創建一個匿名對象,它是匿名的,因爲我們不存儲對它的引用。

2)傳遞一個實現View.OnClickListener()的對象。如果您想將您的活動對象傳遞給setOnClickListener(),則必須聲明它實施View.OnClickListener(),並另外覆蓋public void onClick(View v)方法,例如

public class YourActvivity extends Activity implements View.OnClickListener { 

    onCreate() { 
    } 
    ....etc 

    //implement the View.OnClickListener interface 
    @Override 
    public void on Click(View v) { 
     ...your code here 
    } 

,因爲你有按鈕的排列,並呼籲setOnClickListener(this)其中this爲您的活動這一個方法將被調用爲每個按鍵的,所以如果你想每個按鈕做不同的事情,你將不得不比較使用xml中的按鈕ID查看點擊事件的來源,否則所有按鈕的點擊行爲將完全相同。

,找出被點擊,您可以檢查這樣

switch(v.getId()) { 
    case R.id.btn0: 
     ...do button 0 stuff; 
    break; 
    case R.id.btn1: 
     ...do button 1 stuff; 
    break; 
    ...etc 
    } 

傳遞到onClick()回調是click事件源於與此處引用簡稱爲v onClick(View v)視圖的視圖的按鈕。第二種方法適用於聲明和實現View.OnClickListener的任何對象(Class)。

0

onCreate() 

方法,你應該有提

et.setOnClickListener(this); 

然後覆蓋

onClick(View v) 
{ 
    //Your code here 
} 

這將工作!