0

我开发了一个使用 a 的 Android 应用程序HorizontalScrollView,并且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);
                }
            });
        }
4

1 回答 1

1

代替数组,创建按钮列表,您可以创建按钮并像这样设置它们的 id、标签和 onclicklisteners 并将它们添加到按钮列表中:

 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 或标签进行调用。

如果您需要不同的侦听器,您可以通过 if 函数中使用唯一标记检查并声明另一个操作来控制它们。

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

于 2014-03-25T15:14:44.557 回答