마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

다른 클래스에서 startActivity()하는 방법이 있나요?

0 추천
라이브러리 가져다 쓰다보니,

슬라이드 메뉴를 모든 화면마다 버튼 누르면 튀어 나오게 해야하는데,

매번 화면의 java코드마다 버튼을 정의해줘야 되더라구요(제가 라이브러리를 이해 못해서 그럴꺼 같습니다만...ㅠ)

 

여튼, 버튼을 매 화면마다 정의해주는건 그렇다고 쳐도,

OnClickListener로 계속해서 Intent해주기엔 너무 무식한것 같아서

btn_Home.setOnClickListener(new menuClick()); 이렇게 새 클래스 만들고,

menuClick에서

switch (v.getId()) {
  case R.id.btn_home:
        Intent intent = new Intent(v.getContext(), HomeActivity.class);
        startActivity(intent);
   
        break;

  default:
   break;
  }

이런식으로 홈 버튼 누르면 홈화면으로 넘어가고 싶은데, 어떻게하면 좋을까요???

 

뜨는 오류는 java.lang.NullPointerException입니다 ㅠ

물론 매니패스트에 띄울 액티비티 등록했습니다 ㅎㅎ
떡빵s (1,370 포인트) 님이 2014년 7월 29일 질문
음..풀소스나 라이브러리 주소 한번 부탁드려도 될까요???...
라이브러리는 http://www.donzral.com/729 요기에 있는 것 썼구요.
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.ImageView;

import com.jeremyfeinstein.slidingmenu.lib.app.SlidingActivity;

public class HomeActivity extends SlidingActivity {
   
    private ImageView path_btn;
   
    private Button btn_Write, btn_Home, btn_MyPage, btn_Map, btn_Setting;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        setBehindContentView(R.layout.activity_menu);
       
        getSlidingMenu().setBehindOffset(500);
       
        path_btn = (ImageView) findViewById(R.id.img_path);
       

        btn_Write = (Button) findViewById(R.id.btn_write);
        btn_Home = (Button) findViewById(R.id.btn_home);
        btn_MyPage = (Button) findViewById(R.id.btn_myPage);
        btn_Map = (Button) findViewById(R.id.btn_map);
        btn_Setting = (Button) findViewById(R.id.btn_setting);
       
        btn_Write.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), WriteActivity.class);
                startActivity(intent);
            }
        });
       
        btn_Home.setOnClickListener(new menuClick()); //<-요놈
       
       
       
       
        path_btn.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                path_btn.setImageResource(R.drawable.path2);
                return false;
            }
        });;
       
        path_btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                path_btn.setImageResource(R.drawable.path1);
                getSlidingMenu().showMenu();
            }
        });
    }

   

}

=======================================================

import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;

public class menuClick extends Activity  implements OnClickListener {

    @Override
    public void onClick(View v) {
       
        switch (v.getId()) {
        case R.id.btn_home:
            Intent intent = new Intent(v.getContext(), HomeActivity.class);
            startActivity(intent);
           
            break;

        default:
            break;
        }

    }

}

======================================================
07-29 22:50:29.611: E/AndroidRuntime(8077): FATAL EXCEPTION: main
07-29 22:50:29.611: E/AndroidRuntime(8077): Process: egg.redalcohol.daedongpj, PID: 8077
07-29 22:50:29.611: E/AndroidRuntime(8077): java.lang.NullPointerException
07-29 22:50:29.611: E/AndroidRuntime(8077):     at android.app.Activity.startActivityForResult(Activity.java:3511)
07-29 22:50:29.611: E/AndroidRuntime(8077):     at android.app.Activity.startActivityForResult(Activity.java:3472)
07-29 22:50:29.611: E/AndroidRuntime(8077):     at android.app.Activity.startActivity(Activity.java:3714)
07-29 22:50:29.611: E/AndroidRuntime(8077):     at android.app.Activity.startActivity(Activity.java:3682)
07-29 22:50:29.611: E/AndroidRuntime(8077):     at egg.redalcohol.daedongpj.menuClick.onClick(menuClick.java:18)
07-29 22:50:29.611: E/AndroidRuntime(8077):     at android.view.View.performClick(View.java:4633)
07-29 22:50:29.611: E/AndroidRuntime(8077):     at android.view.View$PerformClick.run(View.java:19330)
07-29 22:50:29.611: E/AndroidRuntime(8077):     at android.os.Handler.handleCallback(Handler.java:733)
07-29 22:50:29.611: E/AndroidRuntime(8077):     at android.os.Handler.dispatchMessage(Handler.java:95)
07-29 22:50:29.611: E/AndroidRuntime(8077):     at android.os.Looper.loop(Looper.java:157)
07-29 22:50:29.611: E/AndroidRuntime(8077):     at android.app.ActivityThread.main(ActivityThread.java:5356)
07-29 22:50:29.611: E/AndroidRuntime(8077):     at java.lang.reflect.Method.invokeNative(Native Method)
07-29 22:50:29.611: E/AndroidRuntime(8077):     at java.lang.reflect.Method.invoke(Method.java:515)
07-29 22:50:29.611: E/AndroidRuntime(8077):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
07-29 22:50:29.611: E/AndroidRuntime(8077):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
07-29 22:50:29.611: E/AndroidRuntime(8077):     at dalvik.system.NativeStart.main(Native Method)


요렇게 보여드리면 될까요?? ㅎㅎ

2개의 답변

0 추천
1. menuClick 클래스 생성장에서 Context를 받아 만들도록 수정하시고

2. 설정하실 때 ....setOnClickListener(new menuClick(getApplicationContext()));

3. v.getContext() 대신 menuClick 생성자에서 받은 context를 사용토록 수정

그리고 NullPointerException 은 주석과 함께 예외처리만 잘해두면 정확한 위치를 항상 찾아낼 수 있으니 꼭 로그 박는 습관 들여주세요.. 그래야 디버깅 쉬워집니다.
Gioskhan (12,060 포인트) 님이 2014년 7월 30일 답변
0 추천

윗분말씀이 맞구요...

간단히 소스로 설명드리자면 아래와 같이 하시면 될꺼 같습니다.

 

1. btn_Home.setOnClickListener(new menuClick(this)); 

2.

public class menuClick extends Activity  implements OnClickListener {

   private Activity mActivityt;

    public memuClick(Activity activity) {

        mActivity = activity;

    }

 


    @Override
    public void onClick(View v) {
        
        switch (v.getId()) {
        case R.id.btn_home:
            Intent intent = new Intent(mActivity, HomeActivity.class);
            mActivity.startActivity(intent);
            
            break;

        default:
            break;
        }

    }

바램 (19,650 포인트) 님이 2014년 7월 30일 답변
...