[英]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.