繁体   English   中英

Onclick事件在Android中不起作用

[英]Onclick event not working in android

我写了一个代码,使用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>

在您的代码中,您将通过mybtn[i].setOnClickListener(this)将活动传递到setOnClickListener()方法中, this是对您的活动的引用。 setOnClickListener()需要一个View.OnClickListener接口作为参数。 那是实现View.OnClickListener接口的任何对象。 您可以通过两种方式执行此操作。

1)创建一个匿名对象,例如

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

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

新的OnClickListener()创建了一个匿名对象,它是匿名的,因为我们不存储对它的引用。

2) View.OnClickListener()实现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是你的活动这一个方法将被调用为每个按键的,所以如果你想每个按钮做不同的事情,你将不得不比较,这是视图id xml中带有按钮ID的click事件的源,否则所有按钮在被单击时的行为都将完全相同。

要找出单击了哪个按钮,您可以像这样检查

   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任何对象(类)。

* 更新 *

哦对不起...

我认为您的听众注册有问题,请尝试以下方法:

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

});

onCreate() 

您必须提及的方法

et.setOnClickListener(this);

然后覆盖

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

这将起作用!

在布局中添加:

android:onClick="onClick"

到要处理的按钮上单击...

您正在将单击按钮的文本读取为字符串变量,但没有使用它。 这应该更像您要实现的目标:

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

确保您的活动如下

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

尝试这个

     {
       ............
        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); 
       }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM