2014-06-05 15 views
10

Pracuję nad aplikacją, w której muszę dynamicznie tworzyć wiele EditText i Spinner. Zacząłem więc szukać rozwiązania , ponieważ nie mam uprawnień do korzystania z właściwości w pliku XML. Szukałem bardzo dużo i dostałem kilka przykładów tylko na stackoverflow. Postępuję zgodnie z nimi i stworzyłem ten program.Dynamiczne tworzenie EditText w Androidzie

 **MainActivity.java code** 

public class MainActivity extends Activity { 

     RelativeLayout containerLayout; 
     static int totalEditTexts = 0; 
     Button button; 
     Context context; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    containerLayout = (RelativeLayout)findViewById(R.id.relative1); 
    button = (Button)findViewById(R.id.button1); 

    button.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View arg0) { 
    // TODO Auto-generated method stub 

    totalEditTexts++; 
    if (totalEditTexts > 100) 
    return; 
    EditText editText = new EditText(getBaseContext()); 
    containerLayout.addView(editText); 
     editText.setGravity(Gravity.RIGHT); 
    RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) editText.getLayoutParams(); 
     layoutParams.width = RelativeLayout.LayoutParams.MATCH_PARENT; 
     layoutParams.setMargins(23, 34, 0, 0); 
    // RelativeLayout.LayoutParams() 
     editText.setLayoutParams(layoutParams); 
    //if you want to identify the created editTexts, set a tag, like below 
    editText.setTag("EditText" + totalEditTexts); 
       } 
      }); 

} }

Kiedy używam tego kodu, to jest stworzenie EditText gdy przycisk został kliknięty. Ale tylko raz. Nie wiem, co się dzieje później. czy tworzy nowy EditText, czy nakłada się na stary, w przeciwnym razie nie tworzy więcej niż jednego EditText.

enter image description here

Czy ktoś może wyjaśnić mi, co mam teraz zrobić, aby rozwiązać ten problem.

Odpowiedz

8

Mam rozwiązać mój problem, po prostu zastępując RelativeLayout z LinearLayout

5

Problem z użyciem RelativeLayout i dynamicznie dodając rzeczy jest to, że jeśli nie ustawić względne położenie zdaniem pokrywa każdy inny. Po kliknięciu i dodaniu nowych widoków nowe widoki są dodawane, ale nakładają się na siebie. Dodając LinearLayout, widoki są widoczne poniżej siebie, ponieważ możesz ustawić orientację na pionową.