2012-10-31 78 views
0

我有一個Button,它增加了一行EditTextTableLayout。我需要找出每個添加行的EditText中的輸入。如何從動態創建的EditTexts獲取輸入?

例如:有人增加了3行,這意味着有3 EditText。在每個EditText中,他們都將數字設置爲3.我需要存儲已添加到佈局的EditText的值,並通過單擊按鈕將它們全部添加。

我會使用一個列表,然後迭代該列表?我不確定我會如何做到這一點。

這是到目前爲止我的代碼...

int count = 1; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_main); 
    getSavedState(); 

    Button buttonAdd = (Button) findViewById(R.id.button1); 
    Button buttonDel = (Button) findViewById(R.id.button2); 
    Button buttonCalc = (Button) findViewById(R.id.button3); 
    buttonAdd.setOnClickListener(this); 
    buttonDel.setOnClickListener(this); 
} 

public void onClick(View v) { 
    TableLayout tableLayout1 = (TableLayout) findViewById(R.id.tableLayout1); 
    List<EditText> allEd = new ArrayList<EditText>(); 

    switch(v.getId()){ 
     case R.id.button1: 
      if(count != 16){ 
       count++; 

       // Create the row only when the add button is clicked 
       TableRow tempRow = new TableRow(MainActivity.this); 
       EditText tempText1 = new EditText(MainActivity.this); 
       EditText tempText2 = new EditText(MainActivity.this); 
       TextView tempTextView = new TextView(MainActivity.this); 
       EditText editText1 = (EditText) findViewById(R.id.editText1); 
       EditText editText2 = (EditText) findViewById(R.id.editText2); 
       TextView textView3 = (TextView) findViewById(R.id.textView3); 
       tempTextView.setText(count + "."); 

       tempRow.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
       tempText1.setLayoutParams(editText1.getLayoutParams()); 
       tempText2.setLayoutParams(editText2.getLayoutParams()); 
       tempTextView.setLayoutParams(textView3.getLayoutParams()); 
       tempText1.setInputType(InputType.TYPE_CLASS_TEXT); 
       tempText2.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); 
       tempText2.setId(count); 
       allEd.add(tempText2); 

       tempRow.addView(tempTextView); 
       tempRow.addView(tempText1); 
       tempRow.addView(tempText2); 
       tableLayout1.addView(tempRow); 
      } 
      else { 
       final AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); //Read Update 
       alertDialog.setTitle("Error"); 
       alertDialog.setMessage("You can only have 10 rows!"); 

       alertDialog.setButton("Ok", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         alertDialog.dismiss(); 
        } 
       }); 

       alertDialog.show(); 
      } 
      break; 
     case R.id.button2: 
      if(count != 1){ 
       count--; 
       tableLayout1.removeView(tableLayout1.getChildAt(count)); 
     } 
      else { 
       final AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); //Read Update 
       alertDialog.setTitle("Error"); 
       alertDialog.setMessage("You must have at least one row!"); 

       alertDialog.setButton("Ok", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         alertDialog.dismiss(); 
        } 
       }); 

       alertDialog.show(); 
      } 
      break; 
     case R.id.button3: 
      String[] strings = new String[allEd.size()]; 
      for(int i = 0; i < allEd.size(); i++) { 
       strings[i] = allEd.get(i).getText().toString(); 
       int input = Integer.parseInt(strings[i]); 

       final AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); //Read Update 
       alertDialog.setTitle("Your calculated GPA"); 
       alertDialog.setMessage("Your calculated GPA is: " + input/count); 
       alertDialog.setButton("Ok", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         alertDialog.dismiss(); 
        } 
       }); 

       alertDialog.show(); 
      } 
     break; 

    } 

回答

1

當您創建每個EditText s時,您需要將它們添加到類似數組的容器中,例如ArrayList<EditText>。無論何時您需要訪問任何這些動態EditText,您都可以從ArrayList中檢索它們。

我可以看到,您已經在onClick()方法中創建了ArrayList<EditText>。這很好,但您需要將ArrayList移動到onClick()方法的外部,以便您可以使用您創建的任何其他方法引用它。因此,移動這條線......

List<EditText> allEd = new ArrayList<EditText>(); 

的方法之外,使onClick()開始幾行現在這個樣子......

List<EditText> allEd = new ArrayList<EditText>(); 

public void onClick(View v) { 
    TableLayout tableLayout1 = (TableLayout) findViewById(R.id.tableLayout1); 

    switch(v.getId()){ 
    case R.id.button1: 

此外,請確保您要添加的所有EditText s到ArrayList - 我看到有一行allEd.add(tempText2);,但我看不到allEd.add(tempText1);的任何行 - 如果您需要訪問tempText1,請確保將其添加到列表中。

要執行「添加」計算,您需要遍歷ArrayList中的條目,獲取它們的值,然後將它們相加。像這樣...

case R.id.button3: 
    // calculate the value first 
    int calculation = 0; 
    for (int i=0;i<allEd.size();i++){ 
     // get the entry 
     EditText textField = addEd.get(i); 

     try { 
      // get the value, as a number 
      int numberValue = Integer.parseInt(textField.getText()); 
      // add it to the calculation 
      calculation += numberValue; 
     } 
     catch (Exception e){ 
      // ignore errors if the input is empty or isn't a number 
     } 
    } 

    // now display the result 
    final AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); 
    alertDialog.setTitle("Your calculated GPA"); 
    alertDialog.setMessage("Your calculated GPA is: " + input/count); 
    alertDialog.setButton("Ok", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      alertDialog.dismiss(); 
     } 
    }); 

    alertDialog.show(); 
break; 
+0

我爲onClick方法添加了一個「計算」按鈕,並通過將onList移出ArrayList,計算按鈕正確顯示了每個單獨的輸入。那麼我將如何去添加每個輸入? – user1460211

+0

您的意思是,將這些值加在一起?你需要遍歷'ArrayList'的所有內容,獲取值並將它們加在一起。 – wattostudios

+0

是的。我添加了我的button3 onClick到我發佈的問題。我想獲取每個引用的值,添加它,然後將其吐出給用戶。 – user1460211

2

你需要保持到添加與每個按鈕按下EditText S變量。既然你不知道會添加多少,我建議使用List<EditText>來存儲它們。使其成爲成員變量,然後您可以訪問列表中的EditText的輸入。

+0

正是我想要回答的。這是訪問dinamycally添加元素的一個非常簡單的方法。 –

相關問題