Carlo Dacuyan
Carlo Dacuyan

Reputation: 43

How can I fix this repetitive code? - Android

@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

Answers (1)

Kevin Coppock
Kevin Coppock

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

Related Questions