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

Как я уже говорил в последний комментарий. Вопрос решен. Следующий код показывает идентификатор от выбранного макета.

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]. После этого вы можете установить флаг [i] = true, если вы установите llNewProduct.Clickable = true; другой флаг установки [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(); 
      } 
     }); 
+0

Я не хочу знать, какой макет можно кликать. Все можно щелкнуть. Мне нужно знать, например, имя продукта, содержащееся в макете. И когда я нажимаю любой макет, всегда получаю последнее имя продукта – daniherculano

+0

Вы можете использовать llNewProduct.setTag (i), и когда вы нажимаете на linearlayout, вы можете получить его из getTag(), и он даст вам значение i , Всякий раз, когда вы получаете позицию из i, вы можете получить значение имени продукта из productList.get (i) .getProductName(). Если у вас все еще есть проблемы, пожалуйста, дайте мне знать. – Jitendra

+0

У меня такая же проблема. Возвращаемый тег является последним для каждого щелчка. Спасибо за вашу помощь. – daniherculano

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