2012-03-30 8 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

答えて

0

。問題は解決されました。次のコードは、クリックされたレイアウトからのIDを示しています。

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

ブール値の配列をboolean[] flag = new boolean[productList.length]として作成する必要があります。その後、llNewProduct.Clickable = trueを設定すると、flag [i] = trueを設定できます。他のセットフラグ[i] =偽; はあなたが見つけることができ、各ループの終了後、

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

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

どのレイアウトがクリック可能であるか知りたくありません。すべてがクリック可能です。レイアウトに含まれている製品名などを知る必要があります。そしてレイアウトをクリックすると、いつも最後の製品名が得られます – daniherculano

+0

llNewProduct.setTag(i)を使うことができます。線形レイアウトをクリックすると、getTag()からそれを得ることができ、iの値が得られます。あなたが私からポジションを得るたびに、productList.get(i).getProductName()から製品名の値を取得できます。まだ問題がある場合は教えてください。 – Jitendra

+0

これには同じ問題があります。返されるタグは、クリックされたすべてのレイアウトの最後です。ご協力いただきありがとうございます。 – daniherculano

0

あなたが追加されたすべてのビューに同じ参照を使用しているfoorループ内のコード、次のように

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

使用など、このフラグの助けを借りてlineanlayoutクリックサイドループ で異なるビューを作成するには、このようにしてみてください。私は最後のコメントで言ったように

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); 
    } 
関連する問題