android - 使用 onClick 按钮更改 EditText 的值?

标签 android function button textview android-edittext

在 main.xml 中,我创建了一行,其中包含一个 TextView、一个 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

}

最佳答案

为您的 View 添加ID,以便您稍后可以引用它们。在您的 Activity 中创建 3 个私有(private)静态 int 字段(NewValueBoxNewAddButtonNewMinusButtonID):

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);
            }

一种黑客方法。

关于android - 使用 onClick 按钮更改 EditText 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9396727/

相关文章:

swift - 尝试在按下按钮时更改 UIView.animate 中的 Button Title 和 label.center.x 但卡住了。为什么? swift 4 Xcode 9.4

java - 如何创建一个在设备打开时设置为默认值的 Android 应用程序

android - 从模拟器上的 uri 获取文件路径

function - 函数名前面的解引用运算符有什么作用?

sql - 无法绑定(bind)多部分标识符 "dbo.showSelectedTable"

java - 如何使用 main.xml 中定义的布局添加按钮?

java - public void - Button.setEnabled 与 if 语句适合我的情况吗?

java - 文本转语音 (android - java) 输出与 Google TTS 输出不同

java - 将 JSON 存储到 SharedpReferences

javascript - 从 Javascript 中的嵌套函数返回值