我开发了一个使用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);
}
});
}
答案 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或标签进行呼叫。
如果您需要不同的听众,您可以使用功能中的唯一标签检查来控制它们,并声明另一个操作。
这是我以编程方式创建动态视图时总是使用的方法。