减少Button onClick事件的代码

时间:2011-08-20 22:06:21

标签: android

我的问题有三个部分。

我的布局由26个按钮组成:ButtonA,ButtonB,ButtonC ... ButtonZ

按钮按顺序排列在屏幕上。单击按钮时,我想捕获click事件,并按照单击的第一个字母过滤单词的SQLiteDB。

如何编写捕获点击的最小代码量,识别按钮的相应字母,并返回以SQLite数据库中所选字母开头的字母?

以下是我的代码,该代码未针对代码简洁进行优化。

//Create your buttons and set their onClickListener to "this"
    Button b1 = (Button) findViewById(R.id.Button04);   
    b1.setOnClickListener(this);

    Button b2 = (Button) findViewById(R.id.Button03);   
    b2.setOnClickListener(this);


     //implement the onClick method here
public void onClick(View v) {
   // Perform action on click
  switch(v.getId()) {
    case R.id.Button04:
        //Toast.makeText(this,"test a",Toast.LENGTH_LONG).show();

     // Do the SqlSelect and Listview statement for words that begin with "A" or "a" here.

       break;
    case R.id.Button03:
        //Toast.makeText(this,"test b",Toast.LENGTH_LONG).show();

 // Do the SqlSelect and Listview statement for words that begin with "A" or "a" here.
      break;
  }

}

3 个答案:

答案 0 :(得分:2)

如果每个角色都有很多字符和一个按钮,我可能会扩展“BaseAdapter”类并制作一个ButtonAdapter,将字母保存为字符数组,而不是实际制作28:ish按钮...... 。如果我正确理解了这个问题吗?

getView看起来像这样:

  public View getView(int position, View convertView, ViewGroup parent) {
    Button button;

    if (convertView == null) {
        button = new Button(mContext);
        button.setTag(alphabet[position]);
        button.setOnClickListener(clickListener);
    } else {
        button = (Button) convertView;
    }

    button.setText(alphabet[position]);
    return button;
  }

答案 1 :(得分:0)

如果您的布局是用XML定义的,则可能需要使用按钮的android:onClick参数。这样您就可以保存findViewById()setOnClickListener()来电。

答案 2 :(得分:0)

正如alextsc所说,如果您希望减少活动中的代码,可以从XML绑定点击侦听器。但是,我认为根据其性质,在循环内的代码中定义按钮可能更好。只需在您的布局中创建一个简单的容器(例如LinearLayout)并添加到该按钮。我们可以利用这样一个事实:你可以循环遍历字符(像整数一样对待它们):

for (char letter = 'a'; letter <= 'z'; letter++) {
    Button button = new Button(this);
    button.setText(String.valueOf(letter));
    button.setOnClickListener(this);
    container.addView(button);
}

至于你的实际点击监听器,你真的不需要打开他们的ID来做你想要的。您知道按钮的数据只是它们的文本值。只需提取并以统一的方式使用它:

public void onClick(View v) {
        Button button = (Button) v;
        String letter = button.getText().toString();
        // filter using letter
}