2012-03-08 7 views
1

this project을 사용하는 내 앱에서 맞춤 팝업 창이 있습니다 (빠른 동작). 이 팝업 창에서 버튼을 클릭 한 후 활동을 시작하고 싶습니다. 다음은 팝업과 함께 활동 코드입니다 :quickaction에서 활동을 시작하는 방법?

public class FirstActivity extends Activity implements OnClickListener { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ImageView popupButton = (ImageView) this.findViewById(R.id.popup_btn); 
    popupButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      PopupWindow dw = new PopupWindow(v); 
      dw.showLikePopDownMenu(); 
     } 
    }); 
} 

    // my stuff 



//popup window 
private class PopupWindow extends PopupWindowActivity implements OnClickListener { 
    public PopupWindow(View anchor) { 
     super(anchor); 
    } 

    @Override 
    protected void onCreate() { 
     // inflate layout 
     LayoutInflater inflater = 
       (LayoutInflater) this.anchor.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     ViewGroup root = (ViewGroup) inflater.inflate(R.layout.popup, null); 

     // setup button events 
     ImageView aboutButton = (ImageView) findViewById(R.id.btn_about); 
     aboutButton.setOnClickListener(this); 

     this.setContentView(root); 
    } 

    @Override 
    public void onClick(View v) { 

     switch (v.getId()) { 
     case R.id.btn_about: { 
     Intent activity = new Intent(FistActivity.this, About.class); 
     startActivity(activity); 
     break; 
     } 

    } 
}} 

그러나 팝업에서 활동을 시작하는 방법은 작동하지 않습니다. 여기 는 (소스 PopupWindow 된 개인 정적 클래스) 코드의 또 다른 버전입니다 :

개인 정적 클래스 PopupWindow가 PopupWindowActivity가 OnClickListener를 { 공공 PopupWindow (보기 앵커) { 슈퍼 (앵커)를 구현 확장; }

@Override 
protected void onCreate() { 
    // inflate layout 
    LayoutInflater inflater = 
      (LayoutInflater) this.anchor.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    ViewGroup root = (ViewGroup) inflater.inflate(R.layout.popup, null); 

    // setup button events 
    ImageView aboutButton = (ImageView) findViewById(R.id.btn_about); 
    aboutButton.setOnClickListener(this); 


    this.setContentView(root); 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.btn_about: { 
     Intent intent = new Intent(); 
     intent.setClass(this, About.class); 

     startActivity(intent); 
     break; 
    } 

    default: 
     break; 
    } 
}} 

일식은 처음 그때 내가 intent.setClass(this, About.class);에 대해 다음 한 private static class PopupWindow extends PopupWindowActivity implements...에서 정적을 삭제해야한다고 말한다 :

The method setClass(Context, Class<?>) in the type Intent is not applicable for the arguments (FirstActivity.PopupWindow, Class<About>). 

이 문제를 해결하는 데 도움이 바랍니다.


로그가 추가되었습니다. 나는 팝업 윈도우 응용 프로그램의 힘을 열고 버튼을 누르면있어 다음 로그로 종료 :

03-09 21:37:18.259: D/AndroidRuntime(9037): Shutting down VM 
03-09 21:37:18.259: W/dalvikvm(9037): threadid=1: thread exiting with uncaught exception (group=0x40018578) 
03-09 21:37:18.259: E/AndroidRuntime(9037): FATAL EXCEPTION: main 
03-09 21:37:18.259: E/AndroidRuntime(9037): java.lang.NullPointerException 
03-09 21:37:18.259: E/AndroidRuntime(9037):  at com.example.FirstActivity$PopupWindow.onCreate(FirstActivity.java:118) 
03-09 21:37:18.259: E/AndroidRuntime(9037):  at com.example.PopupWindowActivity.<init>(PopupWindowActivity.java:52) 
03-09 21:37:18.259: E/AndroidRuntime(9037):  at com.example.FirstActivity$PopupWindow.<init>(FirstActivity.java:103) 
03-09 21:37:18.259: E/AndroidRuntime(9037):  at com.example.FirstActivity$1.onClick(FirstActivity.java:32) 
03-09 21:37:18.259: E/AndroidRuntime(9037):  at android.view.View.performClick(View.java:2485) 
03-09 21:37:18.259: E/AndroidRuntime(9037):  at android.view.View$PerformClick.run(View.java:9080) 
03-09 21:37:18.259: E/AndroidRuntime(9037):  at android.os.Handler.handleCallback(Handler.java:587) 
03-09 21:37:18.259: E/AndroidRuntime(9037):  at android.os.Handler.dispatchMessage(Handler.java:92) 
03-09 21:37:18.259: E/AndroidRuntime(9037):  at android.os.Looper.loop(Looper.java:130) 
03-09 21:37:18.259: E/AndroidRuntime(9037):  at android.app.ActivityThread.main(ActivityThread.java:3687) 
03-09 21:37:18.259: E/AndroidRuntime(9037):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-09 21:37:18.259: E/AndroidRuntime(9037):  at java.lang.reflect.Method.invoke(Method.java:507) 
03-09 21:37:18.259: E/AndroidRuntime(9037):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
03-09 21:37:18.259: E/AndroidRuntime(9037):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
03-09 21:37:18.259: E/AndroidRuntime(9037):  at dalvik.system.NativeStart.main(Native Method) 

답변

0

가능성이 컨텍스트는 의도로 전달이 필요합니다. Context를 매개 변수 중 하나로 받아들이는 생성자를 생성하여 팝업 환경에 컨텍스트를 전달하십시오.

예.

private static class PopupWindow extends PopupWindowActivity implements OnClickListener { 
    private Context context; //you now have access to context! 

    public PopupWindow(View anchor, Context context) { //new constructor 
    super(anchor); 
    this.context = context; //notice this! 

    } 

@Override 
protected void onCreate() { 
    // inflate layout 
    LayoutInflater inflater = 
      (LayoutInflater) this.anchor.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    ViewGroup root = (ViewGroup) inflater.inflate(R.layout.popup, null); 

    // setup button events 
    ImageView searchButton = (ImageView) findViewById(R.id.btn_about); 
    algebraButton.setOnClickListener(this); 


    this.setContentView(root); 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.btn_about: { 
     Intent intent = new Intent(); 
     intent.setClass(context, About.class); //using the context down here!! 

     startActivity(intent); 
     break; 
    } 

    default: 
     break; 
    } 
}} 

공지 코드 intent.setClass (컨텍스트 About.class); 당신이 그것에 대해

+0

감사에 전달 된 컨텍스트를 사용합니다 하지만 지금 여기 내가있어 오류'likemenuButton.setOnClickListener (새 View.OnClickListener() { \t \t \t @Override \t \t \t 공공 무효 온 클릭 (뷰 V) { \t \t \t \t PopupWindow = DW 새로운 PopupWindow (V) \t \t \t \t dw.showLikePopDownMenu(); \t \t \t}'생성자 FirstActivity.PopupWindow (View)가 정의되지 않았습니다. – Sabre

+0

컨텍스트를 생성자에 전달해야합니다. 그것을 다음과 같이 변경하십시오 : PopupWindow dw = new PopupWindow (v, this); – dymmeh

+0

이제 생성자 FirstActivity.PopupWindow (보기, 새 View.OnClickListener() {})가 정의되지 않았습니다. ' – Sabre

관련 문제