2013-02-10 44 views
5

के दौरान एंड्रॉइड पर डुप्लिकेट दृश्य मैंने एक गतिविधि के लिए एक लेआउट फ़ाइल बनाई है। इस लेआउट में मैंने एक टेक्स्टव्यू और एक संपादन के साथ एक लीनियरआउट बनाया है। अब मैं अतिरिक्त रैखिक लयआउट बनाना चाहता हूं जो मेरे मूल रैखिक Layout, लेकिन विभिन्न ग्रंथों के साथ सटीक वही विचार देखेंगे और इसमें शामिल होंगे। मैं रन के दौरान इसे प्रोग्रामेटिक रूप से भी करना चाहता हूं क्योंकि इन लाइनरलाइट की राशि रनों के बीच अलग-अलग होगी। मैंने कुछ inflaters के बारे में कुछ पढ़ा है, लेकिन मैं उन्हें उपयोग करने के लिए पर्याप्त समझ में नहीं आता है।रन-टाइम

मैं कुछ इस तरह सोच रहा हूँ, स्पष्ट रूप से कोड गलत है, लेकिन उम्मीद है कि आप समझते हैं कि मैं क्या करना चाहते हैं:

LinearLayout llMain = (LinearLayout)findViewById(R.id.mainLayout); 
LinearLayout llToCopy = (LinearLayout)findViewById(R.id.linearLayoutToCopy); 
for(int player = 0; player < size; player++) 
{ 
    LinearLayout llCopy = llToCopy.clone(); 
    TextView tv = (TextView)llCopy.getChildAt(0); 
    tv.setText(players.get(player).getName()); 
    llMain.addView(llCopy); 
} 

उत्तर

4

आप प्राप्त कर सकते हैं कि लेआउट inflater

का उपयोग करके लेआउट मिल इस

LayoutInflater inflater = (LayoutInflater) context.getSystemService 
     (Context.LAYOUT_INFLATER_SERVICE); 
LinearLayout newlayout = inflater.inflate(R.layout.yourlayout, null); 

// newlayout is the copy of your layout and you can use it and to get 
// the textview and edittext do it like this 

TextView text = (TextView) newlayout.findView(R.id.yourtextviewid); 
text.setText("new text"); 
EditText et = (EditText) newlayout.findView(R.id.yourtextviewid); 
+1

मैं काफी यकीन है कि टी हूँ टोपी यह समस्या हल नहीं करता है ... – jenzz

+1

यह समस्या हल किया! :) – Marcus

+1

मैंने पहले ऐसा कुछ करने की कोशिश की है, लेकिन फिर मैंने एक ऐसा दृश्य बढ़ाने की कोशिश की जो पहले से ही उस दृश्य के अंदर था जहां मैं इसे रखना चाहता था। लेकिन जब मैंने एक नया नया लेआउट बनाया, तो मैंने इसे फुलाया। अब लेआउट एक टैबलेट है और मैंने लेआउट के अंदर एक टेबललेआउट बनाया है जिसे मुद्रित किया जाना चाहिए, और यह पूरी तरह से काम करता है! तो बहुत बहुत धन्यवाद! – Marcus

16

इसका उपयोग करके inflatter इस को पूरा करने के कई तरीके हैं।
एक त्वरित और आसान दृष्टिकोण पाश के हर चरण में एक नए लेआउट को बढ़ाने के लिए है:

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
LinearLayout parent = (LinearLayout) inflater.inflate(R.layout.main, null); 

for (int i = 0; i < 10; i++) { 
    View child = inflater.inflate(R.layout.child, null); 
    TextView tv = (TextView) child.findViewById(R.id.text); 
    tv.setText("Child No. " + i); 
    parent.addView(child); 
} 

setContentView(parent); 

एक और (और अधिक सुरुचिपूर्ण) समाधान का विस्तार एक अलग वर्ग बनाने के लिए LinearLayout है:

public class ChildView extends LinearLayout { 

    private TextView tv; 

    public ChildView(Context context) { 
     super(context); 

     View.inflate(context, R.layout.child, this); 
     tv = (TextView) findViewById(R.id.text); 
    } 

    public void setText(String text) { 
     tv.setText(text); 
    } 
} 

अब आप अपने पाश के हर चरण में एक ChildView बना सकते हैं और setText(String text) विधि के माध्यम से पाठ सेट कर सकते हैं:

for (int i = 0; i < 10; i++) { 
    ChildView child = new ChildView(this); 
    child.setText("Child No. " + i); 
    parent.addView(child); 
} 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^