Onclick事件在android中不起作用

时间:2012-02-17 10:56:52

标签: 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>

7 个答案:

答案 0 :(得分:3)

在您的代码中,您通过setOnClickListener()将活动传递到mybtn[i].setOnClickListener(this)方法,其中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()的对象。如果您想将活动对象传递给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是您的活动,这个方法将针对您的每个按钮调用,所以如果您希望每个按钮执行不同的操作,您会必须将作为click事件源的视图ID与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()回调的视图是点击事件源自的视图,此处仅作为v onClick(View v)引用。第二种方法适用于声明和实现View.OnClickListener的任何对象(Class)。

答案 1 :(得分:1)

*的 更新 *

哦对不起......

我认为你的听众注册有问题,请尝试这样做:

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

});

答案 2 :(得分:0)

在布局中添加:

android:onClick="onClick"

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

答案 3 :(得分: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 );   
}

答案 4 :(得分: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);     
} 
}
}

答案 5 :(得分: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); 
       }

答案 6 :(得分:0)

onCreate() 

你应该提到的方法

et.setOnClickListener(this);

然后覆盖

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

这会有效!