2012-02-22 72 views
1

在main.xml中,我创建了一个包含TextView,EditText和“+”和“ - ”按钮的行。使用onClick按钮更改EditText的值?

下面,我做了一个“添加”按钮,将帮助您创建一个新的行当你点击添加按钮,你会得到一个EditText和一个提交和取消按钮。

在“提交”上,它将EditText值输出到TextView并创建与第一个相同的行。

当按下“+”按钮时,数值“NewValueBox”应为+1。 但是因为我在另一个函数中调用它,所以无法通过createNewAddButton()函数来识别按钮的设置。

简而言之: “当我点击NewAddButton时,如何更改NewValueBox的值?

下面的代码:

package com.lars.MyApp; 

import com.google.ads.*; 
import com.lars.MyApp.R; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.LinearLayout; 
import android.widget.TableLayout; 
import android.widget.TableRow; 
import android.widget.TextView; 
import android.text.InputType; 
import android.view.View; 
import android.view.View.OnClickListener; 

public class DrinkRecOrderActivity extends Activity { 

    int currentValue1 = 0; 
    int currentValueNew = 0; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     final EditText firstValue = (EditText) findViewById(R.id.firstValue); 
     Button valuePlus = (Button) findViewById(R.id.valuePlus); 
     Button valueMinus = (Button) findViewById(R.id.valueMinus); 

     final Button addValue = (Button) findViewById(R.id.add); 

     final TableLayout tableLayout1 = (TableLayout) findViewById(R.id.tableLayout1); 
     final LinearLayout addValueRow = (LinearLayout) findViewById(R.id.addValueRow); 

     final EditText addNewValue = (EditText) findViewById(R.id.addNewValue); 
     final Button submitNewValue = (Button) findViewById(R.id.submitNewValue); 
     final Button cancelNewValue = (Button) findViewById(R.id.cancelNewValue); 

     // BEGIN ONCLICKLISTENERS 
     valuePlus.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       plusValue(); 
       firstValue.setText("" + currentValue1); 
      } 
     }); 

     valueMinus.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       minValue(); 
       firstValue.setText("" + currentValue1); 
      } 
     });  

     addValue.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       addValueRow.setVisibility(View.VISIBLE); 
       addValue.setVisibility(View.GONE); 
      } 
     }); 

     cancelNewValue.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       addValueRow.setVisibility(View.GONE); 
       addValue.setVisibility(View.VISIBLE); 
      } 
     }); 

     submitNewValue.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       tableLayout1.addView(createnewRow()); 
       addValueRow.setVisibility(View.GONE); 
       addValue.setVisibility(View.VISIBLE); 
       addNewValue.setText(""); 
      } 
     }); 

     // END ONCLICKLISTENERS 

     // Look up the AdView as a resource and load a request. 
     AdView adView = (AdView) this.findViewById(R.id.adView); 
     adView.loadAd(new AdRequest()); 
    } 

    public TableRow createNewRow() { 
     final TableRow newRow = new TableRow(this); 
     final EditText addNewValue = (EditText) findViewById(R.id.addNewValue); 
     newRow.addView(createNewTextView(addNewValue.getText().toString())); 
     newRow.addView(createNewValueBox()); 
     newRow.addView(createNewAddButton()); 
     newRow.addView(createNewMinusButton()); 
     return newRow; 
    } 

    public TextView createNewTextView(String text) { 
     final TextView textView = new TextView(this); 
     textView.setText(text); 
     return textView; 
    } 

    public EditText createNewValueBox() { 
     EditText NewValueBox = new EditText(this); 
     NewValueBox.setHint("0"); 
     NewValueBox.setInputType(InputType.TYPE_CLASS_NUMBER); 
     return NewValueBox; 
    } 

    public Button createNewAddButton() { 
     final Button NewAddButton = new Button(this); 

     NewAddButton.setText("+"); 

     NewAddButton.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       plusNew(); 

       //NewValueBox.setText("" + currentValueNew); 
      } 

     }); 

     return NewAddButton; 
    } 

    public Button createNewMinusButton() { 
     final Button NewMinusButton = new Button(this); 
     NewMinusButton.setText("-"); 
     return NewMinusButton; 
    } 

    // BEGIN PLUS AND MIN FUNCTIONS 

    public void plusNew() { 
     if (currentValueNew <= 999) { 
      currentValueNew = currentValueNew + 1; 
     } 
    } 

    public void plusValue() { 
     if (currentValue1 <= 999) { 
      currentValue1 = currentValue1 + 1; 
     } 
    } 

    public void minValue() { 
     if (currentValue1 >= 1) { 
      currentValue1 = currentValue1 - 1; 
     } 
    } 

    // END PLUS AND MIN FUNCTIONS 

} 
+0

在按钮的on-click-handler函数中,在特定的EditText对象上调用setText('chars')。 – hovanessyan 2012-02-22 14:37:53

回答

2

添加ID为了你们的Views,所以你可以在以后引用它们。让您的活动3私有静态诠释字段(IDNewValueBoxNewAddButtonNewMinusButton):

private static int edt = 1; 
private static int add = 1001; 
private static int minus = 2001; 

然后在您的createNewValueBox()方法设置ID:

NewValueBox.setId(edt); 
edt++; 

做的一样NewAddButtonNewMinusButton

NewAddButton.setId(add); 
add++; 

NewMinusButton.setId(minus); 
    minus++; 

然后在你的听众的按钮找出到底是哪个添加按钮被点击,并设置相应的EditText文:

NewAddButton.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       plusNew(); 
       int tmp = v.getId(); 
       EditText temp = (EditText) findViewById(1 + (tmp - 1001)); 
       temp.setText("" + currentValueNew); 
      } 

类hackish的方法。

+0

非常感谢!这工作! 只有我现在得到了...当我添加多行,例如我按“+”3次。然后按其他值,一旦它变为4. 所以currentValueNew正在...... – 2012-02-22 19:43:33

+0

@LarsVandeDonk你应该有一个单独的数组来保存新值,因为你正在与你认为所添加的所有行共享该字段。 – Luksprog 2012-02-22 20:00:24

+0

是的,我想,有没有办法做同样的事情,你在v.getId();数组?所以我计算数组的数量或者什么? – 2012-02-22 20:08:43