-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
package com.windev.bookmarkroid;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class Bookmarkroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.now);
Button now_books = (Button)findViewById(R.id.now_books);
* now_books.setOnClickListener(new OnClickListener());*
Button now_share = (Button)findViewById(R.id.now_share);
now_share.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
Intent intent1 = new Intent(Bookmarkroid.this, Books.class);
startActivity(intent1);
Intent intent2 = new Intent(Bookmarkroid.this, Share.class);
startActivity(intent2);
}
});
}
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
다음과같은 코드가 있다면 오류가 별표를 친 now_books.setOnClickListener(new OnClickListener()); 이곳에서 납니다 -_-;;
현재 제가 하려는것은 도저히 탭을 못써먹을것같아서, 버튼과 이미지뷰로 탭을 구현하고있는데요..
Now.xml에서 Books.xml과 Share.xml 각각 이 두 화면으로 Intent하여 액티비티자체를 버튼으로 변환해보려는 생각을 가지고 하고있습니다.
이미 매니페스트에는 저 두 액티비티를 추가시킨것은 완료되었는데.. Share로 이동하는것을 구현하지 않았을때는 Books가 정상적으로 구동이 되었는데, Share을 Books와 똑같은 방법으로 구동시키니 Share은 오류가 없되, Books가 말썽을 일으키는군요..-_-;
고수님들의 답변을 기다리겠습니다 (__)
ps. 현재 에러메시지는 다음과 같습니다 "Canot instantiate the type View.OnclickListener"
ps2. 뭔가 문법에러같은데..초보라서 정말 감이 안오는군요 -_-
public class Bookmarkroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.now);
Button now_books = (Button)findViewById(R.id.now_books);
now_books.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
Intent intent1 = new Intent(Bookmarkroid.this, Books.class);
startActivity(intent1);
}
});
Button now_share = (Button)findViewById(R.id.now_share);
now_share.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
Intent intent2 = new Intent(Bookmarkroid.this, Books.class);
startActivity(intent2);
}
});
Button now_setting = (Button)findViewById(R.id.now_setting);
now_setting.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
Intent intent3 = new Intent(Bookmarkroid.this, Books.class);
startActivity(intent3);
}
});
}
}
이렇게 해야하는것이었나요 -_-;;?
onClick에서 한꺼번에 저 3개의 버튼 기능을 담당해주는줄 알았는데... 역시 제가 초짜라서..아무튼 무지무지 감사합니다!!
book2.setOnClickListener(clickListener);
이렇게 간소화를 시켜주고 onCreate 문 밖에
private OnClickListener clickListener = new OnClickListenr{
@Override
public void onClick(View v){
switch (v.getId){
case R.id.button1:
/// 처리
break;
case R.id.button2:
/// 처리
break;
}
return true;
}
}; 뭐 이런식으로 소스를 작성해 나가야 합니다.
어떤 한 리스너가 여러 View에서 쓰일때는
tjvkfkd 님이 말씀하신것처럼 통합해서 쓰는게 좋습니다.
tjvkfkd님이 말한대로 써도 되고 클래스에 OnClickListener
인터페이스를 적용해서 써도 됩니다.
이 경우에는 public class Bookmarkroid extends Activity 뒤에 implements OnClickListener를
추가하시면 public void onClick(View v) 오버라이드 메소드를 넣으라고 뜹니다.
거기에 아이디마다 처리명령어를 넣어주시면 되고 Click이벤트를 적용할 View에는
book1.setOnClickListener(this); 라고 선언하시면 됩니다.
화면의 모양새는 말그대로 View이고... View를 전환하는데 setContentView 라는 아주 친절한 Activity의 메소드가 있죠.
물론 위젯 컨트롤들의 초기화해야 하고 보여지는 View에 따른 State 관리라는 점이 있지만
얼마든지 구현 가능한 대목이구요.
탭을 포기하면 어쩔수 없이 여러 Activity를 쓰거나 한 Activity에서 View의 전환을 이용하거나 둘중 하나가 될겁니다.
후자는 안드로이드 기본 InCallScreen(통화화면)이 그렇게 되어있을겁니다.
여러 Activity를 쓸 경우에 Activity의 Stack을 관리해야 하는 경우가 생길 수 있겠죠.
그리고 View의 전환을 쓴다면 View의 History에 대한 Stack을 관리해야만 할수도 있을거구요.
(인터넷 쓰다가 뒤로가기 하는것처럼요.)
어떤게 쉬울지는 프로젝트마다 다를수 있는데요.
대체로 전자쪽은 '가능하다'에 가깝고 후자는 '될거 같긴 한데 어떤 어려움에 봉착할지 모르겠다'에 가깝습니다.




new OnClickListener() 다음에 아무것도 안써있네요.... 아래꺼는 써있는데...
new OnClickListener() {
public void onClick (View v) {
}
}