현재 Android에서 간단한 계산기 앱을 만들고 있습니다. 숫자 버튼을 누르면 해당 숫자로 계산기 화면이 업데이트되도록 코드를 설정하려고합니다. 현재 저는 이렇게하고 있습니다.
Button one = (Button) findViewById(R.id.oneButton);
one.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView output = (TextView) findViewById(R.id.output);
output.append("1");
}
});
작동하지만 계산기의 모든 버튼에 대해 동일한 코드를 작성하고 있습니다. 당신이 상상할 수 있듯이 그것은 매우 중복됩니다. 어쨌든이 코드를보다 효율적인 방법으로 작성할 수 있습니까? 모든 버튼에 대해이 방법을 작성하지 않는 것이 포함 된 것입니까?
답변
당신은 단순히 쉽게 만들기 위해 다음 단계를 따라야합니다 …
onClickListener
모든 것에 대해 새로 작성할 필요가 없습니다 . / ..에 Button
구현 View.OnClickLister
하십시오 . , TextView` 등에 대한 onClick 이벤트를 처리하기 위해 호출 되는 새 메소드를 구현합니다 .Activity
Fragment
onClick()
Button
- 구현
OnClickListener()
당신에Activity
/Fragment
public class MainActivity extends Activity implements View.OnClickListener {
}
- 활동 / 조각에 onClick () 메서드 구현
public class MainActivity extends Activity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onClick(View v) {
// default method for handling onClick Events..
}
}
OnClickListener()
버튼 구현
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
Button one = (Button) findViewById(R.id.oneButton);
one.setOnClickListener(this); // calling onClick() method
Button two = (Button) findViewById(R.id.twoButton);
two.setOnClickListener(this);
Button three = (Button) findViewById(R.id.threeButton);
three.setOnClickListener(this);
}
- ID로 버튼 찾기 및 코드 구현 ..
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.oneButton:
// do your code
break;
case R.id.twoButton:
// do your code
break;
case R.id.threeButton:
// do your code
break;
default:
break;
}
}
자세한 내용은이 링크를 참조하십시오.
https://androidacademic.blogspot.com/2016/12/multiple-buttons-onclicklistener-android.html (업데이트 됨)
이렇게하면 많은 버튼 클릭 이벤트를 더 쉽게 처리 할 수 있고 관리가 간단 해 보입니다.
답변
속성을 설정할 수 있습니다.
android:onClick="buttonClicked"
각 버튼에 대한 xml 파일에서 다음을 Java 코드에서 사용하십시오.
public void buttonClicked(View view) {
if (view.getId() == R.id.button1) {
// button1 action
} else if (view.getId() == R.id.button2) {
//button2 action
} else if (view.getId() == R.id.button3) {
//button3 action
}
}
답변
각 버튼의 태그를 작업하려는 항목 (이 경우 정수)으로 설정합니다. 그런 다음 모든 버튼에 대해 하나의 OnClickListener 만 필요합니다.
Button one = (Button) findViewById(R.id.oneButton);
Button two = (Button) findViewById(R.id.twoButton);
one.setTag(new Integer(1));
two.setTag(new Integer(2));
OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView output = (TextView) findViewById(R.id.output);
output.append(v.getTag());
}
}
one.setOnClickListener(onClickListener);
two.setOnClickListener(onClickListener);
답변
View.OnClickListener를 구현하는 전용 클래스를 만들었습니다.
public class ButtonClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show();
}
}
그런 다음 MainActivity에서이 클래스의 인스턴스를 만들었습니다.
private ButtonClickListener onClickBtnListener = new ButtonClickListener();
버튼에 onClickListener를 설정하십시오.
btn.setOnClickListener(onClickBtnListener);
답변
public class MainActivity extends AppCompatActivity implements OnClickListener {
Button b1,b2;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1= (Button) findViewById(R.id.button);
b2= (Button) findViewById(R.id.button2);
b1.setOnClickListener(this);
b2.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
if(v.getId()==R.id.button)
{
Intent intent=new Intent(getApplicationContext(),SignIn.class);
startActivity(intent);
}
else if (v.getId()==R.id.button2)
{
Intent in=new Intent(getApplicationContext(),SignUpactivity.class);
startActivity(in);
}
}
}
답변
나는 비슷한 문제가 있었고 내가 한 일은 : 버튼 배열 만들기
Button buttons[] = new Button[10];
그런 다음 클릭 리스너를 구현하고 xml ID를 참조하기 위해 다음과 같은 루프를 사용했습니다.
for (int i = 0; i < 10; i++) {
String buttonID = "button" + i;
int resID = getResources().getIdentifier(buttonID, "id",
"your package name here");
buttons[i] = (Button) findViewById(resID);
buttons[i].setOnClickListener(this);
}
그러나 이들을 호출하는 것은 Prag의 답변 포인트 4와 동일하게 유지됩니다. PS- 누구든지 버튼의 모든 onClick을 호출하는 더 좋은 방법이 있다면 의견을 보내주십시오.
답변
public void onClick(View v) {
int id = v.getId();
switch (id){
case R.id.button1:
//do ur code
Toast.makeText(this,"This is button 1",Toast.LENGTH_SHORT).show();
break;
case R.id.button2:
Intent intent = new Intent(this,SecondActivity.class);
Intent.putExtra("key",value);
startActivity(intent);
break;
case R.id.button3:
//do ur code
break;
case R.id.button4:
//do ur code;
break;
default:
//do ur code;
}
}