由ID组成的一系列视图

时间:2014-07-08 16:06:11

标签: android arrays button buttonclick

我有接口,我必须使用按钮而不是列表而不是按钮。我想知道是否可以通过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;
             }

关于如何以这种方式处理的任何想法

2 个答案:

答案 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);

然后使用与适配器视图显示的方法相同的方法。