使用不同的按钮清除不同的edittexts,同时重复使用相同的代码

时间:2016-06-09 04:48:09

标签: java android

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

XML:

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/fieldOneInput"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/clearButtonText"
        android:id="@+id/clearTextField1"
        android:onClick="clearTextField1"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/fieldTwoInput"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/clearButtonText"
        android:id="@+id/clearTextField2"
        android:onClick="clearTextField2"/>

爪哇:

 public void clearTextField1(View view){
     EditText fieldOneInput = (EditText) findViewById(R.id.fieldOneInput);
     fieldOneInput.setText("");
 }

 public void clearTextField2(View view){
     EditText fieldTwoInput = (EditText) findViewById(R.id.fieldTwoInput);
     fieldOneInput.setText("");
 }

如果我有多个带有“清除”按钮的edittexts,这是不切实际的。在重用相同的(java)代码时,如何使用不同的按钮清除不同的edittexts字段?

6 个答案:

答案 0 :(得分:2)

您可以使用以下代码实现此目的:

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

}

答案 1 :(得分:1)

您可以定义这样的方法:

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),在设置监听器之前只执行一次。

答案 2 :(得分:0)

您可以使用以下代码片段来重复使用代码

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

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

btnClear.setOnClickListener(new View.OnClickListener() {

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

    }

答案 3 :(得分:0)

无论哪种方式,你仍然必须实例化按钮,这是显而易见的。我可以回收和复制代码的一种方法是复制并粘贴股票代码,例如

    public void clearTextField*(View view){
     EditText* fieldOneInput = (EditText) findViewById(R.id.fieldOneInput*);
     fieldOneInput*.setText("");
 }

然后继续使用Notepad++(特别是find and replace函数将{&#34; *&#34;替换为您所使用的任何数字textView。简单有效。除此之外我想你可以创建一个与此类似的public void function并将按钮的id传递给它,如下所示:

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

但我没有测试该代码,所以如果出现错误或异常,请不要让我感到沮丧。希望这有帮助!

答案 4 :(得分:0)

将其用于每个文本字段

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

答案 5 :(得分:0)

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

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

注意:如果您希望将代码添加为模块,则此方法无效。

您可以使用naran z的答案并对其进行一些修改。

@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("");
    }