2012-03-30 48 views
0

我必須根據實體列表按照不同的方式創建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

它來自哪裏?llNewProduct.Clickable = true;'? – waqaslam 2012-03-30 08:57:03

回答

0

正如我在最後評論說。問題解決了。下一個代碼顯示點擊佈局的ID。

llNewProduct.Click += (sender, e) 
{ 
    LinearLayout ll = sender as LinearLayout; 
    Toast.MakeText(this, ll.Id.ToString(), ToastLength.Short).Show(); 
} 
0

您必須創建一個布爾sucg數組作爲boolean[] flag = new boolean[productList.length]。在此之後,您可以在設置llNewProduct.Clickable = true時設置flag [i] = true;其他設置標誌[我] =假; 每完成循環,你可以找到後點擊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"); 
} 
} 

使用下面的福爾循環代碼

llNewProduct.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Toast.makeText(YouActivity.this, ""+v.getId(), Toast.LENGTH_SHORT).show(); 
      } 
     }); 
+0

我不想知道哪個佈局是可點擊的。所有都是可點擊的。例如,我需要知道佈局中包含的產品名稱。當我點擊任何佈局時,總是會得到最後一個產品名稱 – daniherculano 2012-03-30 09:11:20

+0

您可以使用llNewProduct.setTag(i),當您單擊linearlayout時,您可以從getTag()中獲取它,它會爲您提供i 。無論何時從i獲得位置,您都可以從productList.get(i).getProductName()獲取產品名稱值。如果你還有問題,請告訴我。 – Jitendra 2012-03-30 09:21:48

+0

這樣做我有同樣的問題。返回的標籤是每個佈局點擊的最後一個。謝謝你的幫助。 – daniherculano 2012-03-30 09:29:28

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); 
    }