我必须根据实体列表以动态方式创建LinearLayouts。布局没有问题。我的问题是当我试图知道我点击了哪个布局时,因为总是引用最后一个布局。
代码是这样的:
LinearLayout llProducts = FindViewById<LinearLayout>(Resource.Id.llProducts);
LinearLayout llNewProduct;
int i = 0;
foreach(Product p in productsList)
{
llNewProduct = new LinearLayout(this);
llNewProduct.Clickable = true;
llNewProduct.Id = i++;
TextView txtProduct = new TextView(this);
txtProduct.Text = p.Name;
llNewProduct.AddView(txtProduct);
llProducts.AddView(llNewProduct);
llNewProduct.Click += (sender, e)
{
//This always shows the last Id
Toast.MakeText(this, llNewProduct.Id.ToString(), ToastLength.Short).Show();
}
}
我感谢一些帮助。感谢
答案 0 :(得分:0)
您必须创建一个布尔值为boolean[] flag = new boolean[productList.length]
的数组。在此之后,您可以在设置llNewProduct.Clickable = true时设置flag [i] = true;其他set flag [i] = false;
完成每个循环后,您可以在此标志的帮助下找到单击的lineanlayout,例如
for(int i=0;i<flag.length;i++){
if(flag[i]){
Log.v("TAG","Clicked linear layout");
}else{
Log.v("TAG","Not Clicked linear layout");
}
}
在foor循环中使用以下代码
llNewProduct.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(YouActivity.this, ""+v.getId(), Toast.LENGTH_SHORT).show();
}
});
答案 1 :(得分:0)
您对所有添加的视图使用相同的引用,在侧循环中创建不同的视图 试试这样:
for(int i1 = 0; i1 < 3;i1++)
{
LinearLayout llNewProduct = new LinearLayout(this);
LayoutParams p = new LayoutParams(100, 100);
llNewProduct.setLayoutParams(p);
if(i1 == 0) llNewProduct.setBackgroundColor(Color.RED);
if(i1 == 1) llNewProduct.setBackgroundColor(Color.GREEN);
if(i1 == 2) llNewProduct.setBackgroundColor(Color.BLUE);
llNewProduct.setClickable(true);
llNewProduct.setId(i1);
llNewProduct.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(CaptureImage.this, ""+v.getId(), Toast.LENGTH_SHORT).show();
}
});
ll1.addView(llNewProduct);
}
答案 2 :(得分:0)
正如我在上次评论中所说。问题解决了。下一个代码显示了点击布局的ID。
llNewProduct.Click += (sender, e)
{
LinearLayout ll = sender as LinearLayout;
Toast.MakeText(this, ll.Id.ToString(), ToastLength.Short).Show();
}