Re: [问题] android studio 关于button问题

楼主: givemepass (λ)   2017-06-05 14:19:06
※ 引述《CPU100 (小丑)》之铭言:
: 之前完全没接触过JAVA 更别提开发Android程式了
: 目前老板突然丢一只Android的程式过来,实在有看没懂,希望版上前辈指导
: 以下是在看程式遇到的问题
: 在layout的XML里,同样是button ,有一个有使用onClick这个事件,一个没有none
: 但两个按钮点击都有功能的
同样的事件可以有多种表示方法
以下这种是写至在 xml (不推荐
: 1.这是有使用onClick
: public void btn_onClick (View view) {
: Intent intent = new Intent(this, Main3Activity.class);
: startActivity(intent);
: MainActivity.this.finish();
这样代表着在程式内宣告了一个 btn_onClick 方法
并且你可以在 xml 内看到以下的写法
<Button
android:onClick="btn_onClick"
android:text="push me"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
以下这种是写在程式内(较常见
: 2.这是没有使用onClick
: registered.setOnClickListener(new View.OnClickListener() {
: @Override
: public void onClick(View v) {
: Intent intent = new Intent(Main2Activity.this,
: registeredpage.class);
: startActivity(intent);
: Main2Activity.this.finish();
第二种写法代表着他是用匿名类别的物件来实作的
可以参考良葛格的文章
https://openhome.cc/Gossip/Java/AnonymousInnerClass.html
也可以参考我之前写过的一篇文章的解释
https://www.ptt.cc/bbs/AndroidDev/M.1326163107.A.BDA.html
: 请问这两种方式,什么情况下使用呢?
: 如果我想把第一个有使用onClick的按钮改用第二种写法,该怎么改呢?
: 谢谢!!
如果要改成第二种写法
首先要在 xml 内将该 Button 设定一个 id
并且在主程式内透过
Button btn = (Button) findViewById(R.id.your_id);
btn.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
// do something
}
});
这样就可以完成一个事件的宣告了
比较不推荐第一种的写法
因为在 code review 的时候不好追踪
大部分的情况之下是会采取第二种的写法
除了可以共用 Listener 以外
可读性也比较高
对于 Button 的运作也可以参考一下拙作
http://givemepass.blogspot.tw/2016/11/button.html
虽然你是临时被老板叫去写 Java
如果未来还是要开发 Android 建议是从 Java 的基础观念学起
作者: Liulian (流连)   2017-06-05 14:25:00
推认真回文XD
作者: sofasoso (BANG!BANG!BANG!)   2017-06-05 14:44:00
推givemepass大大
作者: ssccg (23)   2017-06-05 16:43:00
两种写法都可以共用listener吧
作者: gcobc12632 (Ted)   2017-06-05 18:46:00
问一下关于第一种跟第二种写法对于效能有影响吗?
作者: ssccg (23)   2017-06-05 20:36:00
第一种是用reflection呼叫实际方法,理论上比较慢不过一个UI事件只用一次,差距是在nanosecond等级的,其实没什么影响
作者: sean0430 (NANA)   2017-06-07 21:53:00
还有一种是用class实作listener的写法XD

Links booklink

Contact Us: admin [ a t ] ucptt.com