我的问题有三个部分。
我的布局由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;
}
}
答案 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
}