我编写了一个代码,用于在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 :(得分: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
}
这会有效!