从我读过,您可以通过onClick两种方式为按钮分配处理程序.
使用android:onClickXML属性,您只需使用带有签名的公共方法的名称,void name(View v)或使用setOnClickListener传递实现OnClickListener接口的对象的方法.后者通常需要一个我个人不喜欢的匿名课程(个人品味)或者定义实现该课程的内部课程OnClickListener.
通过使用XML属性,您只需要定义一个方法而不是一个类,所以我想知道是否可以通过代码而不是XML布局来完成相同的操作.
我是Android开发的半新手,当我第一次开始时,我试图避免以任何必要的方式使用xml布局,因此我之前的一些项目涉及显式创建OnClickListener并将其实现为匿名内部类的按钮.如 -
final Button button = new Button(this);
button.setText("Click to change second line of text");
OnClickListener buttonListener = new View.OnClickListener() {
boolean clicked = false;
int numClicks = 0;
@Override
public void onClick(View v) {
if(numClicks > 5) {
button.setText("STOP IT");
}
numClicks++;
if(clicked == false){
clicked = true;
tv2.setText("Text Changed on Button Click");
}
else
{
clicked = false;
tv2.setText("Click again");
}
}
};
button.setOnClickListener(buttonListener);
Run Code Online (Sandbox Code Playgroud)
但随着我越来越熟悉android,我开始理解xml布局的价值,并实现了这样的按钮
<Button
android:id="@+id/button1"
android:layout_height = "wrap_content"
android:layout_width ="wrap_content"
android:text = "lets do …Run Code Online (Sandbox Code Playgroud) 我正在关注Google的Android教程并发现有两种方法可以根据标题获得小部件回调(或者只有onClick - 我不知道).
我是一名高级Java Swing开发人员,所以内部类方法让我有宾至如归的感觉:)但我明白xml方法更新 - 所以谷歌必须添加它是有原因的.
这是什么原因?如果现在避免使用内部类方法(在支持它的版本上),在Android平台上这样做是否"更好"?
问题:
我想在按下"添加"按钮时隐藏键盘.
EditText屏幕上有两个.键盘在启动活动时不会出现,这很好,但单击按钮时不会消失.

以下是Stack Overflow的所有可能的问题,我看到他的答案对我没有帮助:
如何在EditText外单击后在android上隐藏软键盘?
和许多其他人.
这是我的代码:
AddActivity
public class AddActivity extends ActionBarActivity {
EditText text1,text2;
DbHelper db;
ListView l;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
db = new DbHelper(this);
l = (ListView) findViewById(R.id.listInAddActivity);
text1 = (EditText) findViewById(R.id.i1);
text2 = (EditText) findViewById(R.id.i2);
// text1.setInputType(InputType.TYPE_NULL);
// text2.setInputType(InputType.TYPE_NULL);
hideKeyboard();
loadDataInAdd();
}
public void addNewTask(View view) {
String s1 = text1.getText().toString();
String s2 = text2.getText().toString();
db.addData(s1,s2);
loadDataInAdd();
hideKeyboard();
}
public void loadDataInAdd()
{
try {
Cursor cursor …Run Code Online (Sandbox Code Playgroud)