2012-03-08 79 views
1

我在我的應用程序中使用了this project自定義彈出窗口(快速操作)。我想在點擊按鈕之後開始活動(在這個彈出窗口中)。這裏是彈出窗口的活動代碼:如何從快速啓動活動?

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; 
    } 
}} 

日食說,起初我應該從private static class PopupWindow extends PopupWindowActivity implements...刪除靜態,然後我有以下爲intent.setClass(this, About.class);

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

可能是你需要有環境傳送到你的意圖。嘗試通過創建一個接受上下文作爲參數之一的構造函數將上下文傳遞到popupwindowactivity中。

Ex。

​​

通知代碼 intent.setClass(上下文,About.class); 它利用您在

+0

感謝您的傳遞的上下文的,但在這裏,現在我已經得到了錯誤'likemenuButton.setOnClickListener(新View.OnClickListener(){ \t \t \t @覆蓋 \t \t \t公共無效的onClick(視圖v){ \t \t \t \t PopupWindow DW =新PopupWindow(v); \t \t \t \t dw.showLikePopDownMenu(); \t \t \t}構造函數FirstActivity.PopupWindow(View)未定義 – Sabre 2012-03-08 22:52:32

+0

您需要將上下文傳遞給構造函數。將其更改爲:PopupWindow dw = new PopupWindow(v,this); – dymmeh 2012-03-08 22:53:40

+0

現在我已經有'構造函數FirstActivity.PopupWindow(View,new View.OnClickListener(){})是未定義的' – Sabre 2012-03-08 22:57:23