2012-02-17 108 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 
} 

这将工作!