动态创建可点击的linearlayout

时间:2012-03-30 08:52:18

标签: android xamarin.android

我必须根据实体列表以动态方式创建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();
     }

}

我感谢一些帮助。感谢

3 个答案:

答案 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(); 
}
相关问题