Kathleen
Kathleen

Reputation: 25

How can I solve the problem about setOnClickListener

I cannot solve about setOnClickListener

public class MainActivity extends AppCompatActivity {

    private Button btn1, btn2, btn3, btnC;
    private EditText edit;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edit = (EditText)findViewById(R.id.editText);
        btn1 = (Button)findViewById(R.id.btnOne);
        btn2 = (Button)findViewById(R.id.btnTwo);
        btn3 = (Button)findViewById(R.id.btnThree);
        btnC = (Button)findViewById(R.id.btnClear);


        OnClickListener cl = new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (v == btn1)
                    edit.setText(edit.getText().toString() + 1);
                else if (v == btn2)
                    edit.setText(edit.getText().toString() + 2);
                else if (v == btn3)
                    edit.setText(edit.getText().toString() + 3);
                else if (v == btnC)
                    edit.setText("");
            }


// error line

        btn1.setOnClickListener(cl);

        btn2.setOnClickListener(cl);

        btn3.setOnClickListener(cl);
        };
    }
}

I wanna make something like calculate click the button then appear on editText

Upvotes: 0

Views: 76

Answers (3)

Ahmed Fayez
Ahmed Fayez

Reputation: 106

I think the problem in your code is that you called setOnClickListener functions inside the scope of the cl object you are creating so try to modify your code to this :

public class MainActivity extends AppCompatActivity {

private Button btn1, btn2, btn3, btnC;
private EditText edit;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    edit = (EditText)findViewById(R.id.editText);
    btn1 = (Button)findViewById(R.id.btnOne);
    btn2 = (Button)findViewById(R.id.btnTwo);
    btn3 = (Button)findViewById(R.id.btnThree);
    btnC = (Button)findViewById(R.id.btnClear);


    View.OnClickListener cl = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (v == btn1)
                edit.setText(edit.getText().toString() + 1);
            else if (v == btn2)
                edit.setText(edit.getText().toString() + 2);
            else if (v == btn3)
                edit.setText(edit.getText().toString() + 3);
            else if (v == btnC)
                edit.setText("");
            }
        };

        btn1.setOnClickListener(cl);

        btn2.setOnClickListener(cl);

        btn3.setOnClickListener(cl);
    
    }
}

But I recommend you to use Lambda expression instead like this :

btn1.setOnClickListener(v -> edit.setText(edit.getText().toString() + 1));
btn2.setOnClickListener(v -> edit.setText(edit.getText().toString() + 2));
btn3.setOnClickListener(v -> edit.setText(edit.getText().toString() + 3));
btnC.setOnClickListener(v -> edit.setText(""));

this will be more clear and readable

Upvotes: 2

Suvidha Malaviya
Suvidha Malaviya

Reputation: 342

The Best method i always use the below code.Implement the OnclickListener and Override the onClick method.

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private Button b1, b2, b3, bClear;
private EditText txtCount;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    txtCount= (EditText)findViewById(R.id.txtCount);
    b1 = (Button)findViewById(R.id.btn1);
    b2 = (Button)findViewById(R.id.btn2);
    b3 = (Button)findViewById(R.id.btn3);
    bClear = (Button)findViewById(R.id.btnClear);

    bt.setOnClickListener(this);
    b2.setOnClickListener(this);
    b3.setOnClickListener(this);
    bCount.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.btn1:
            txtCount.setText(edit.getText().toString() + 1);
            break;
        case R.id.btn2:
            txtCount.setText(edit.getText().toString() + 2);
            break;
        case R.id.btn3:
            txtCount.setText(edit.getText().toString() + 3);
            break;
        case R.id.bClear:
            txtCount.setText("");
            break;
    }
}

}

Upvotes: 0

Chandan Sharma
Chandan Sharma

Reputation: 2933

Try this,

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btn1, btn2, btn3, btnC;
    private EditText edit;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edit = (EditText)findViewById(R.id.editText);
        btn1 = (Button)findViewById(R.id.btnOne);
        btn2 = (Button)findViewById(R.id.btnTwo);
        btn3 = (Button)findViewById(R.id.btnThree);
        btnC = (Button)findViewById(R.id.btnClear);

        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
        btn3.setOnClickListener(this);
        btnC.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btnOne:
                edit.setText(edit.getText().toString() + 1);
                break;
            case R.id.btnTwo:
                edit.setText(edit.getText().toString() + 2);
                break;
            case R.id.btnThree:
                edit.setText(edit.getText().toString() + 3);
                break;
            case R.id.btnClear:
                edit.setText("");
                break;
        }
    }
}

Upvotes: 1

Related Questions