Reputation: 25
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
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
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
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