我有两个不同的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字段?
答案 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("");
}