조언 바탕으로 어느정도 완성을 했는데
오류 3개가지가 걸리네요..
어떤 이유로 오류가 나는지 아시는 분 계시면
가르켜주시면 감사드립니다. ㅠㅠ
new 하니깐 다른분이 하면 안된다고 해서... ㅠㅠ
그런데 new 붙이니깐
이쪽 부분 오류 발생...ㅠㅠ
하나 풀면 하나 생기고 또 풀면 또 생기고 ㅠㅠ
어떤 에러가 나는지 전체 소스를 보여주시는게 가장 좋긴 하지만 ...
일단 여는 괄호와 닫는 괄호의 갯수를 먼저 세어보시기 바랍니다. 그림에서 보기엔 닫는괄호가 하나 부족하네요. ' } ' 이거요..
new 해주시는 것 맞습니다. 그런데 아마 예상에 import 부분 보시면
import import android.content.DialogInterface.OnClickListener;
라고 되어있을겁니다. 이건 다이얼로그 클릭 이벤트라서 당연히 인터페이스 함수 형이 다릅니다.
그냥 View의 클릭 이벤트를 사용하시려면 위의 import를 지우시고
import android.view.View.OnClickListener;
이걸로 바꾸고 해보시면 잘될껍니다.
OnClickListener tempClickListener = new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
}
};
package exam.Project;
import android.app.*;
import android.os.*;
import android.view.*;
import android.view.View.OnClickListener;
import android.widget.*;
public class Project extends Activity implements View.OnClickListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1 = (Button)findViewById(R.id.btn1);
Button btn2 = (Button)findViewById(R.id.btn2);
Button btn3 = (Button)findViewById(R.id.btn3);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);
OnClickListener mOnClickListener = new View.OnClickListener(){
@Override
public void onClick(View v){
int value = v.getId();
if (value == R.id.btn1){
} else if (value == R.id.btn2){
} else if (value == R.id.btn3){
}
}
}
}
private OnClickListener OnClickListener() {
// TODO Auto-generated method stub
return null;
}
public void onClick(View arg0) {
// TODO Auto-generated method stub
}
}
// TODO Auto-generated method stub
아... 제가 다 보질 않았군요...
제 예상은 implements View.OnClickListener 이부분때문인듯 합니다.
이렇게 선언하면 클릭 리스너를 이렇게 쓰는게 아닐겁니다;
하도 옛날에 해서 가물가물하긴 한데 일단 저걸 지우고 해보세요
내부의 메소드의 마지막에 ; 을 추가해 주세요.
OnClickListener mOnClickListener = new View.OnClickListener(){
@Override
public void onClick(View v){
int value = v.getId();
if (value == R.id.btn1){
} else if (value == R.id.btn2){
} else if (value == R.id.btn3){
}
}
};해결하셨나요?
private void Back() {
btnBack = (Button) findViewById(R.id.btn_back);
btnBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
제가 버튼 클릭하는 이벤트 작성한건데요..
이것처럼 한 번 작성해보시겠어요?
괄호 열고 닫고 한 번 체크해보세요~
제가 실제로 사용한 코드입니다. 이 상태로 메인에서 호출해서 설정했습니다. 굳이 이렇게 할 필요는 없고, 대충 어떻게 돌아가는지 확인해보시면 될거 같습니다.
몇가지 부연 설명 하자면 아래 코드에서 final을 제거하면 오류가 뜹니다. 선언을 전역변수로 하거나 final을 사용하거나 해야됩니다.
이유가 궁금하시면 직접 찾아보시길 권합니다. 그렇게 복잡한 이유는 아니므로...
저번에도 말씀드렸지만 아래의 if~else if 문은 switch ~ case 문으로 대체 가능합니다.
void setButtons() {
final Button line = (Button)findViewById(R.id.main_button_1line);
final Button cam = (Button)findViewById(R.id.main_button_2cam);
final Button graph = (Button)findViewById(R.id.main_button_3graph);
OnClickListener click = new OnClickListener() {
@Override
public void onClick(View v) {
if (v.getId()==line.getId()) {
Intent intent = new Intent(Main.this, LineUDP.class);
startActivity(intent);
} else if (v.getId()==cam.getId()) {
Intent intent2 = new Intent(Main.this, CamViewOne.class);
startActivity(intent2);
} else if (v.getId()==graph.getId()) {
Intent intent3 = new Intent(Main.this, GraphView.class); startActivity(intent3);
}
}
};
line.setOnClickListener(click);
cam.setOnClickListener(click);
graph.setOnClickListener(click);
}윗 코드 부분 수정해봤습니다. 코드랑 주석 같이 보시면서 뭐가 틀렸나 비교해보세요.
두가지 당부드리고 싶은 말은 일단 다음부터는 탭 조절하셔서 코드 보기 좋게 만드셔야 됩니다. 아래의 제 코드와 위의 질문자께서 올리신 코드를 비교해보세요. 어느 쪽이 보기 좋은가요?
코드가 보기 힘들면 자기가 만들어놓고도 잘 못 읽는 경우가 생깁니다. 코드가 읽기 힘들면 당연히 유지보수가 힘들어집니다. 보통은 이클립스에서 자동으로 해주는 경우가 많으니 굳이 일일히 스페이스나 탭을 넣을 필요는 없지만, 자신이 보기에 코드가 어렵다 싶으면 적절히 재정렬해줘야 합니다.
코드의 반정도는 괄호 미스던데 이런거는 코드가 보기 쉬워야 좀 잘 보입니다.
그리고 매번 이렇게 긴 대답 할 수 있는 것도 아니고, 간단한건 책으로 배우는 것이 훨씬 좋습니다. 질답란을 사용하기 전에 책과 인터넷으로 예제 코드를 보고 실행하면서 대략적인 감을 잡는게 제일 처음 할 일이라고 봅니다. 급하지 않으시면 천천히 처음부터 하시길 권합니다.
package exam.Project;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import app.novel.R; //테스트하는 프로젝트명이 app.novel일 뿐, 별다른 의미는 없습니다. 프로젝트에 따라 달라집니다
public class Project extends Activity { //이 예제에서는 코드 내에 직접 삽입할 것이므로 implements 구문은 넣지 않겠습니다
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1 = (Button)findViewById(R.id.btn1);
Button btn2 = (Button)findViewById(R.id.btn2);
Button btn3 = (Button)findViewById(R.id.btn3);
/* btn1.setOnClickListener(this); 코드 내에서 삽입하려고 할때는 우선 리스너를 먼저 구현해야 합니다.
btn2.setOnClickListener(this); 고로 이 예제에서는 리스너를 구현한 뒤에 설정하도록 합니다.
btn3.setOnClickListener(this);*/
OnClickListener mOnClickListener = new View.OnClickListener(){
// 일단은 원 소스에 따라 View를 붙였지만 굳이 View를 붙이지 않아도 됩니다
//이미 import 되어 있기 때문입니다. new OnClickListener() { 로 시작해도 문제 없습니다.
@Override
public void onClick(View v){
int value = v.getId();
if (value == R.id.btn1){
} else if (value == R.id.btn2){
} else if (value == R.id.btn3){
}
}
}; //괄호가 잘 맞는지 확인하시고 닫아야 됩니다. 세미콜론을 붙이는 닫는 괄호의 기준은
//OnClickListener의 괄호입니다.
btn1.setOnClickListener(mOnClickListener); //리스너 구현 뒤에 이런 식으로 설정합니다
btn2.setOnClickListener(mOnClickListener); //리스너는 여러 개를 구현할 수 있으니 리스너명을 제대로 넣어줍니다
btn3.setOnClickListener(mOnClickListener); //물론 다른 방법도 있습니다
}
/*
이 예제에서는 코드 내에서 다 처리하므로 아래 코드는 필요없어 주석처리합니다.
private OnClickListener OnClickListener() {
// TODO Auto-generated method stub
return null;
}
public void onClick(View arg0) {
// TODO Auto-generated method stub
}
*/
}



해결방법은 new 입니다.