2012-03-30 2 views
0

엔티티 목록에 따라 dinamically 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]로 부울 sucg의 배열을 만들어야합니다. 그 후에 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 값 . 당신이 position에서 얻을 때마다 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); 
    } 
관련 문제