LinearLayout中的动态添加按钮,按钮单击事件问题

时间:2012-09-14 09:20:15

标签: android button dynamic android-linearlayout horizontalscrollview

我开发了一个使用HorizontalScrollView的Android应用程序,HorizontalScrollView有一个孩子作为LinearLayout

现在我想在运行时添加LinearLayout上的按钮意味着动态。

我成功添加了按钮,但问题是我的按钮点击事件在Android中不起作用。

ArrayList listClassItems = objCompany.getListClassItems();

        Button[] btnCategory = new Button[listClassItems.size()];

        for(int i=0;i<listClassItems.size();i++)
        {
            System.out.println("OTHER_CLASS LENGTH : " + listClassItems.size()); 
            System.out.println("CLASS ID : " + listClassItems.get(i).getClassId());
            System.out.println("CLASS NAME : " + listClassItems.get(i).getClassName());

            btnCategory[i] = new Button(myContext); 
            btnCategory[i].setId(i);
            btnCategory[i].setTag(listClassItems.get(i).getClassId());
            btnCategory[i].setText(listClassItems.get(i).getClassName());
            btnCategory[i].setClickable(true);


            btnCategory[i].setPadding(10,10,10,10);

LayoutParams layParams = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);

            if(i!=0 || i!=listClassItems.size()-1)
            {
                layParams.leftMargin = 10;
                layParams.rightMargin = 10;
            }


            tabRowBottom.addView(btnCategory,layParams);

            btnCategory[i].setOnClickListener(null);

            tabRowBottom.addView(btnCategory[i]);



            btnCategory[i].setOnClickListener(new Button.OnClickListener() 
            {   
                public void onClick(View v) 
                {
                    Toast.makeText(myContext, "=== Button CLICKED ===",Toast.LENGTH_SHORT).show();
                    btnCategory.setBackgroundColor(Color.BLACK);
                }
            });
        }

1 个答案:

答案 0 :(得分:1)

创建一个按钮列表而不是数组,您可以创建按钮并设置它们的id,标签和onclicklistenners,并将它们添加到按钮列表中:

 buttonList = new ArrayList<Button>();

    for (int i=0;i<5;i++){
        Button button = new Button(getApplicationContext());
        button.setOnClickListener(customListenner);
        button.setId(i);
        button.setTag(i);
        myLayout.addView(button);
        buttonList.add(button);
    }

当您需要再次使用该按钮时,只需使用列表中的ID或标签进行呼叫。

如果您需要不同的听众,您可以使用功能中的唯一标签检查来控制它们,并声明另一个操作。

这是我以编程方式创建动态视图时总是使用的方法。