Reputation: 43
@Override
protected void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
setContentView(R.layout.activity_filter);
etColor1 = (EditText) findViewById(R.id.etColor1);
etColor1.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
etColor1.setEnabled(false);
}
});
btnEdit1 = (Button) findViewById(R.id.btnEdit1);
btnEdit1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
etColor1.setEnabled(true);
etColor1.requestFocus();
}
});
etColor2 = (EditText) findViewById(R.id.etColor2);
etColor2.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
etColor2.setEnabled(false);
}
});
btnEdit2 = (Button) findViewById(R.id.btnEdit2);
btnEdit2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
etColor2.setEnabled(true);
etColor2.requestFocus();
}
});
etColor3 = (EditText) findViewById(R.id.etColor3);
etColor3.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
etColor3.setEnabled(false);
}
});
btnEdit3 = (Button) findViewById(R.id.btnEdit3);
btnEdit3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
etColor3.setEnabled(true);
etColor3.requestFocus();
}
});
Hi guys! So I have this code that detects Focus for EditText. Initially, all EditTexts are disabled and then when I click an 'Edit' button beside it, it will be focused (other EditTexts are still disable), and then when I click other 'Edit' button, the EditText that I have clicked already will be disabled again.
The code does what I want very well, but I believed it can be shorten. Sorry for the newb question. Thanks everyone!
Upvotes: 1
Views: 90
Reputation: 134714
As @Stephan mentioned, you can make use of the fact that the view you set the listener on is provided to you in the callback. Just make your Activity implement those interfaces, and you can simplify this quite a bit:
public class MyActivity extends Activity implements
View.OnFocusChangeListener, View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
setContentView(R.layout.activity_filter);
int[] editTexts = new int[] { R.id.etColor1, R.id.etColor2, R.id.etColor3 };
for (int editText : editTexts) {
findViewById(editText).setOnFocusChangeListener(this);
}
int[] buttons = new int[] { R.id.btnEdit1, R.id.btnEdit2, R.id.btnEdit3 };
for (int button : buttons) {
findViewById(button).setOnClickListener(this);
}
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
v.setEnabled(false);
}
@Override
public void onClick(View v) {
v.setEnabled(true);
v.requestFocus();
}
}
Upvotes: 1