Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用不同的按钮清除不同的编辑文本,同时重复使用相同的代码_Java_Android - Fatal编程技术网

Java 使用不同的按钮清除不同的编辑文本,同时重复使用相同的代码

Java 使用不同的按钮清除不同的编辑文本,同时重复使用相同的代码,java,android,Java,Android,我有两个不同的edittext字段,每个字段都有一个“清除”按钮来清除输入的文本。我可以这样清除两个字段: XML: 如果我有多个编辑文本,每个文本都有一个“清除”按钮,这是不实际的。在重用同一(java)代码时,如何使用不同的按钮清除不同的EditText字段?您可以使用以下代码剪贴集使代码可重用 您必须在单击按钮时调用此方法。并传递要清除的edittext和要清除edittext的按钮 public void clearOnClick(final EditText edtClear, But

我有两个不同的edittext字段,每个字段都有一个“清除”按钮来清除输入的文本。我可以这样清除两个字段:

XML:


如果我有多个编辑文本,每个文本都有一个“清除”按钮,这是不实际的。在重用同一(java)代码时,如何使用不同的按钮清除不同的EditText字段?

您可以使用以下代码剪贴集使代码可重用

您必须在单击按钮时调用此方法。并传递要清除的edittext和要清除edittext的按钮

public void clearOnClick(final EditText edtClear, Button btnClear)
    {

btnClear.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                edtClear.setText("");
            }
        });

    }

您可以使用以下代码剪贴集使代码可重用

您必须在单击按钮时调用此方法。并传递要清除的edittext和要清除edittext的按钮

public void clearOnClick(final EditText edtClear, Button btnClear)
    {

btnClear.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                edtClear.setText("");
            }
        });

    }

不管是哪种方式,你仍然需要实例化按钮,这是显而易见的。我可以循环使用代码并使其变得简单的一种方法是复制并粘贴股票代码,例如

    public void clearTextField*(View view){
     EditText* fieldOneInput = (EditText) findViewById(R.id.fieldOneInput*);
     fieldOneInput*.setText("");
 }
然后继续使用
Notepad++
(特别是
find And replace
函数来替换“*”无论您使用的是什么号码
textView
。简单有效。除此之外,我认为您可以创建一个类似于此的
public void函数
,并将按钮的
id
像这样传递给它:

public void ClearText(String id){
Button defaultButton = (Button)findViewById(id);
defaultbutton.setText("your text");
}

但是我没有测试代码,所以如果代码中有错误或异常,请不要责备我。希望这有帮助!

无论哪种方法,您仍然必须实例化按钮,这是显而易见的。我可以循环使用代码并使其变得简单的一种方法是复制和粘贴库存代码,例如

    public void clearTextField*(View view){
     EditText* fieldOneInput = (EditText) findViewById(R.id.fieldOneInput*);
     fieldOneInput*.setText("");
 }
然后继续使用
Notepad++
(特别是
find And replace
函数来替换“*”无论您使用的是什么号码
textView
。简单有效。除此之外,我认为您可以创建一个类似于此的
public void函数
,并将按钮的
id
像这样传递给它:

public void ClearText(String id){
Button defaultButton = (Button)findViewById(id);
defaultbutton.setText("your text");
}

但是我没有测试该代码,所以如果其中有错误或异常,请不要责备我。希望这有帮助!

对每个文本字段都使用它

public void clearTextField1(EditText editText){
     editText.setText("");
 }

对每个文本字段使用此选项

public void clearTextField1(EditText editText){
     editText.setText("");
 }

您可以使用以下代码实现这一点:

public class AbcActivity extends Activity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //... your code here, to get button objects from xml file
        button1.setOnClickListener(this);
        button2.setOnClickListener(this);
        button3.setOnClickListener(this);
        button4.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.button1:
                clearEditText(R.id.editText1);
                break;
            case R.id.button2:
                clearEditText(R.id.editText2);
                break;
            case R.id.button3:
                clearEditText(R.id.editText3);
                break;
            case R.id.button4:
                clearEditText(R.id.editText4);
                break;
        }
    }

    private void clearEditText(int editTextId) {
        findViewById(editTextId).setText("");
    }

}

您可以使用以下代码实现这一点:

public class AbcActivity extends Activity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //... your code here, to get button objects from xml file
        button1.setOnClickListener(this);
        button2.setOnClickListener(this);
        button3.setOnClickListener(this);
        button4.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.button1:
                clearEditText(R.id.editText1);
                break;
            case R.id.button2:
                clearEditText(R.id.editText2);
                break;
            case R.id.button3:
                clearEditText(R.id.editText3);
                break;
            case R.id.button4:
                clearEditText(R.id.editText4);
                break;
        }
    }

    private void clearEditText(int editTextId) {
        findViewById(editTextId).setText("");
    }

}

您可以定义如下所示的方法:

private void setClickListener(Button button, final EditText editText) {
    button.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            editText.setText("");
        }
    });
}
然后你可以打电话

setClickListener(button1, editText1);
setClickListener(button2, editText2);
...

注意:避免在onClickListener内调用findViewById(id),在设置侦听器之前只调用一次。

您可以定义如下方法:

private void setClickListener(Button button, final EditText editText) {
    button.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            editText.setText("");
        }
    });
}
然后你可以打电话

setClickListener(button1, editText1);
setClickListener(button2, editText2);
...

注意:避免在onClickListener内调用findViewById(id),只需在设置侦听器之前调用一次即可。

首先,当您觉得在类中需要按钮等的多个单击侦听器时,只需实现interface View.onClickListener

每个视图都有一个我们分配给它的唯一id。这些id存储为编译时常量,因此可以引用到开关案例中

注意:如果您希望将代码添加为模块,则此方法不起作用

您可以使用答案,并对其进行一些修改

@Override
    public void onClick(View view) {
        int id = INVALID_EDITTEXT_ID; // say -1
        switch (view.getId()) {
    case R.id.button1:
        id = R.id.editText1;
            break;
        case R.id.button2:
        id = R.id.editText2;
            break;
        case R.id.button3:
        id = R.id.editText3;
            break;
        case R.id.button4:
        id = R.id.editText4);
            break;
        }
        if(id!=INVALID_EDITTEXT_ID)
            findViewById(id).setText("");
    }

首先,当您觉得类中的按钮等需要多个单击侦听器时,只需实现接口View.OnClickListener

每个视图都有一个我们分配给它的唯一id。这些id存储为编译时常量,因此可以引用到开关案例中

注意:如果您希望将代码添加为模块,则此方法不起作用

您可以使用答案,并对其进行一些修改

@Override
    public void onClick(View view) {
        int id = INVALID_EDITTEXT_ID; // say -1
        switch (view.getId()) {
    case R.id.button1:
        id = R.id.editText1;
            break;
        case R.id.button2:
        id = R.id.editText2;
            break;
        case R.id.button3:
        id = R.id.editText3;
            break;
        case R.id.button4:
        id = R.id.editText4);
            break;
        }
        if(id!=INVALID_EDITTEXT_ID)
            findViewById(id).setText("");
    }

从两个按钮中调用相同的方法。在该方法内,尝试
((EditText)视图)。getText().clear();
。但是,如果您试图清除给定布局中的所有字段,则从两个按钮中清除ViewGroup中EditText的所有实例,调用相同的方法。在该方法内,尝试
((EditText)视图)。getText().clear();
。但是如果您试图清除给定布局中的所有字段,则需要清除ViewGroup中EditText的所有实例。第一个代码片段实际上是我想要避免的-复制和粘贴相同的代码感觉很糟糕。后者也不是我想要的,因为它设置了按钮的文本,而不是按钮的文本他EditText在我的代码段中更改对
按钮的所有引用,并将其替换为
EditText
。这就是我想要避免的所有内容。复制和粘贴相同的代码感觉很糟糕。后者也不是我想要的,因为它设置了按钮的文本,而不是按钮的文本他编辑文本在我的代码片段中更改对
按钮的所有引用,并将其替换为
EditText
。仅此而已