【问题标题】:How to launch activity from quickaction?如何从快速操作启动活动?
【发布时间】:2012-03-08 22:17:14
【问题描述】:

我的应用中有一个使用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 中是私有的 static 类):

私有静态类 PopupWindow 扩展 PopupWindowActivity 实现 OnClickListener { 公共弹出窗口(查看锚点){ 超级(锚); }

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

eclipse 说一开始我应该从private static class PopupWindow extends PopupWindowActivity implements... 中删除static,然后我关注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)

【问题讨论】:

    标签: java android android-activity popup


    【解决方案1】:

    您可能需要将上下文传递到您的意图中。尝试通过创建一个接受 Context 作为参数之一的构造函数将上下文传递到您的 popupwindowactivity

    例如

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

    注意代码 意图.setClass(上下文,关于.class); 它利用了您传入的上下文

    【讨论】:

    • 谢谢你,但现在我在这里遇到错误likemenuButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { PopupWindow dw = new PopupWindow(v); dw.showLikePopDownMenu(); } 构造函数 FirstActivity.PopupWindow(View) 未定义
    • 您需要将上下文传递给构造函数。改成这样:PopupWindow dw = new PopupWindow(v, this);
    • 现在我有The constructor FirstActivity.PopupWindow(View, new View.OnClickListener(){}) is undefined
    • 对不起,应该是:PopupWindow dw = new PopupWindow(v, FirstActivity.this);
    • 感谢您尝试解决我的问题,但是当我按下按钮打开弹出窗口时,应用程序强制关闭。我添加了有问题的登录。请看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 2019-06-01
    相关资源
    最近更新 更多