我有接口,我必须使用按钮而不是列表而不是按钮。我想知道是否可以通过ID将按钮分组而不是在交换机中循环(这很长),因为我有很多按钮。 通常如果它是一个listview适配器,我会做这样的事情,如果我在一个adapteview
String[] clickitems = getResources().getStringArray(R.array.array) ;
String toclasses = clickitems[position] ;
try {
Class classes = Class.forName(getPackageName()+"."toclasses);
Intent intent = new Intent(Main.this, classes);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) ;
startActivity(intent) ;
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
现在我想使用相同的方法来获取单击的按钮,使用v.getId()作为要使用的数组而不是该情况的位置。而不是
switch(v.getId()){
case R.id.xxx:
break;
}
关于如何以这种方式处理的任何想法
答案 0 :(得分:3)
您可以通过将Button的标记设置为数组中的索引来大大简化此操作。这里的优点是获取标记是O(1)而不是O(n),这是索引查找。
添加按钮时:
button.setTag(clickitems[position]);
然后你的onClick看起来像这样:
public void onClick(View v) {
try {
Class clazz = Class.forName((String)v.getTag());
Intent intent = new Intent(Main.this, getPackageName()+"."+clazz);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) ;
startActivity(intent) ;
} catch (ClassNotFoundException e) {
Log.e(TAG, "Couldn't get class from tag", e);
}
}
答案 1 :(得分:1)
您可以使用以下方式获取按钮v
的位置:
int position = ((ViewGroup) v.getParent()).indexOfChild(v);
然后使用与适配器视图显示的方法相同的方法。