2010-10-10 13 views
13

İçinde XML görünümünde bir ViewGroup tanımladım, onCreate zamanında Onlardan bir değişkene sahip olmak istiyorum.
Listview + bağdaştırıcı kullanmanın zorluğunu aşmak istemiyorum, çünkü listenin değişmeyeceğini bildiğim gibi overCreate()
Bu, ister istemez daha çok .Bir ViewGroup'a eklemek için metin görünümünde klonlama

TextView mytextview = myViewGroup.findViewById(R.id.mytext); 

for(String test : strings){ 
    mytextview = mytextview.clone(); 
    mytextview.setText(test); 
    myViewGroup.addView(mytextview); 
} 

Ama çalışmıyor.

+0

senin almak Geçerli sonuç nedir? MyTextView sadece bir kez görülebilir mi? –

+0

http://stackoverflow.com/a/15761866/884674 adresine bir yanıt ekledim, sizin için uygun olup olmadığına bakın. –

cevap

19

Belki bir Inflater kullanın ve harici düzeni dosyasında TextView koyun: Bunu yaparsanız

View v = LayoutInflater.from(this).inflate(R.layout.textview_include, null); 
viewGroup.addView(v); 
+1

Bir inflater kullanamazsam ne yapmalıyım? – suitianshi

1

, büyük olasılıkla bu şekilde oluşturulan her görünüm için aynı kodu oluşturulacaktır. Bu, ((TextView) v) .setText ("bazı metin") gibi şeyler yapmak anlamına gelir; Daha önce aynı düzende şişirilmiş olan her bir TextView'e çağrılacaktır. Sen bu şekilde yapmak hala, ancak setId (call) ve arka arkaya iki kez aynı kimliği alamadım size sağlamak için bazı makul yöntem olmalıdır - vb Ayrıca

incrementation veya evrensel zaman, bence Android dinamik olarak oluşturulmuş kimlikler için belirli bir kimlik alanı ayırır. Kimliklerin bu aralıkta bulunmasını engelleyebilirsiniz; ama dürüstçe, id sisteminin çalıştığını bilmiyorum bu yüzden bu noktada yanlış olabilirim.

0

Mathias Lin kodu kullanarak ve javahead76 gelen ipucu kullanarak:

LinearLayout x = (LinearLayout) findViewById(R.id.container); 

    for (int i = 0; i < 5; i++) { 
     View c = LayoutInflater.from(this).inflate(R.layout.singlerow, x); 
     TextView t = ((TextView)findViewById(R.id.textView1)); 
     t.setId(i+10000); 
     t.setText("text"+i);    
    } 
    TextView b = (TextView) findViewById(10003); 
    b.setText("10003"); 
+1

'for' döngüsünün sonunda' findViewById' amacına ne? Bu işlev, '0' -' 4' için 'View' ibaresini döndürür (sizin durumunuzda), fakat bunu her yerde kullanmazsınız. –

+0

@ Pimp Trizkit Haklısınız Kaldırma işlemini unuttum. Bu eski bir kod. –