Hello, My Android(三)

界面设计完成后,我要开始为那个Button的单击事件设计响应函数。

在Android中,事件的设计也很诡异。我们先来看代码:

public class HelloMyAndroid extends Activity {
    /** Called when the activity is first created. */
    public static int counter=0;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button btnClickMe=(Button)findViewById(R.id.btnClickMe);
        btnClickMe.setOnClickListener(new View.OnClickListener(){
            public void onClick(View view)
            {
                TextView lbl=(TextView)findViewById(R.id.lblHello);
                Date d=new Date();
                Formatter f=new Formatter();
                f.format(You clicked me on %s for %d time(s)., d.toGMTString(), ++counter);
                lbl.setText(f.toString());
            }
        });
    }
}

很奇怪吧。在OnCreate事件中连接事件响应还是可以理解的,而这个Listener直接用inline class来实现至少对我来说很少见。我更习惯用一个成员函数来处理。这点还需要更进一步的研究。

其它的代码并没有什么技术含量。每次点击那个按钮后,就显示“你在什么时候点了按钮几次”而已。

两点需要说明:

  • 如果我们运行程序,点击几次后用手机上的Home或者Back按钮回到主界面,然后再次运行这个程序,我们会发现,程序并没有显示原始的标签,而还是显示“你在什么时候点了按钮几次”,并且,继续点击按钮时,counter会正确的计数。这是因为,用Home或者Back回到主界面并没有关闭这个程序。这个程序还在后台运行。
  • f.format中用到的格式化字符串还是嵌入在程序代码中的,并没有放置到资源中然后再取出。这个问题我还没有解决。

============

第一个程序的开发先暂时如此。总结一下:

  1. 代码比较清晰明了。资源、代码等的分离可以免除一些不必要的麻烦;
  2. 速度运行的很快,至少在我的模拟器上;
  3. 事件响应的映射还比较自然、合理;
  4. 对中文的处理非常好(当然,在模拟器中还无法输入中文),中文显示没有任何问题。

下一个程序,将显示两个界面之间的转换……

Comments

2 responses to “Hello, My Android(三)”

  1. 令狐虫 Avatar

    很奇怪吧。在OnCreate事件中连接事件响应还是可以理解的,而这个Listener直接用inline class来实现至少对我来说很少见。
    ————
    这是java标准的事件处理方式啊。

  2. tr Avatar
    tr

    @LS
    我不是Java编的少吗……

Leave a Reply to tr Cancel reply

Your email address will not be published. Required fields are marked *