2014-09-02 4 views
0

Таким образом, в моем приложении у меня есть линейное расположение, к которому я добавляю программно некоторые CardViews (Android L cardview), как это:Как изменить вид созданного программно

//This is my LinearLayout 
    LinearLayout myLayout = (LinearLayout) findViewById(R.id.accounts_layout); 

    //Here i create my CardView from a prepared xml layout and inflate it to the LinearLayout 
    View card = View.inflate(getApplicationContext(), R.layout.account_card, myLayout); 

    //Now i change the 'text' value of the Card's text views 
    TextView cardTitle = (TextView) card.findViewById(R.id.text_card_title); 
    cardTitle.setText("Title1"); 
    TextView cardDecription = (TextView) card.findViewById(R.id.text_card_description); 
    cardDecription.setText("Description1"); 
    //... 

    //Now i do the same thing for another card 
    View card2 = View.inflate(getApplicationContext(), R.layout.account_card, myLayout); 

    TextView cardTitle2 = (TextView) card2.findViewById(R.id.text_card_title); 
    cardTitle2.setText("Title2"); 
    TextView cardDecription2 = (TextView) card2.findViewById(R.id.text_card_description); 
    cardDecription2.setText("Description2"); 
    //... 

Две карты отображаются правильно, но происходит то, что первая отображаемая карта имеет «Title2» и «Description2», написанные в текстовых окнах, а вторая карта имеет значения по умолчанию, определенные в xml. Мне кажется, что, позвонив card.findViewById() или card2.findViewById(), я всегда получаю TextView первой карты. Итак, мой вопрос: как мне удается дифференцировать карты, которые я создаю программно, а затем сопоставлять доступ к виду внутри них?

ответ

2

Попробуйте этот путь, надеемся, что это поможет вам решить вашу проблему.

 LinearLayout myLayout = (LinearLayout) findViewById(R.id.accounts_layout); 
     for (int i=1;i<=2;i++){ 

      View card = View.inflate(getApplicationContext(), R.layout.account_card, null); 
      TextView cardTitle = (TextView) card.findViewById(R.id.text_card_title); 
      cardTitle.setText("Title"+i); 
      TextView cardDecription = (TextView) card.findViewById(R.id.text_card_description); 
      cardDecription.setText("Description"+i); 

      card.setTag(i); 
      card.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        int pos = (Integer) v.getTag(); 
        Toast.makeText(context,pos,Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      myLayout.addView(card); 
     } 
+0

Спасибо, что сработало! Но возникла другая проблема: я поместил некоторые свойства заголовка на карту в свой xml (высота, ширина, граница, ecc ..), но теперь эти свойства больше не рассматриваются! – Fiora

Смежные вопросы