3

我正在尝试开始第二个活动,但我收到代码错误。

import android.os.Bundle;
import android.content.Intent;
import android.app.Activity;
import android.widget.Button;

import android.view.View;

import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewStub;
import android.widget.AdapterView;
import android.widget.ImageButton;
import android.widget.Toast;


public class MainActivity extends Activity
{
    private static final int ID_SPLASH = 1;
    private static final int ID_MAIN = 2;
    private static final int ID_PROFILE = 3;
    private static final int ID_PLAY = 4;
    private static final int ID_HELP = 5;


    @Override

    protected void onCreate(Bundle savedInstanceState)
    {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setContentView(R.layout.main);
        ImageButton menuBtn = (ImageButton)findViewById(R.id.iBtn1);
        //Button example1Btn    = (Button) findViewById(R.id.btn1);
        ActionItem splashItem   = new ActionItem(ID_SPLASH, "Splash", getResources().getDrawable(R.drawable.ic_action_about));
        ActionItem mainItem     = new ActionItem(ID_MAIN, "Main", getResources().getDrawable(R.drawable.ic_content_undo));
        ActionItem profileItem  = new ActionItem(ID_PROFILE, "Profile", getResources().getDrawable(R.drawable.ic_social_person));
        ActionItem playItem     = new ActionItem(ID_PLAY, "Play", getResources().getDrawable(R.drawable.ic_hardware_gamepad));
        ActionItem helpItem     = new ActionItem(ID_HELP, "Help", getResources().getDrawable(R.drawable.ic_action_help));

        //use setSticky(true) to disable QuickAction dialog being dismissed after an item is clicked
        helpItem.setSticky(true);

        final QuickAction mQuickAction  = new QuickAction(this);

        mQuickAction.addActionItem(splashItem);
        mQuickAction.addActionItem(mainItem);
        mQuickAction.addActionItem(profileItem);
        mQuickAction.addActionItem(playItem);
        mQuickAction.addActionItem(helpItem);

        //setup the action item click listener
        mQuickAction.setOnActionItemClickListener(new QuickAction.OnActionItemClickListener() {
            @Override
            public void onItemClick(QuickAction quickAction, int pos, int actionId) {
                ActionItem actionItem = quickAction.getActionItem(pos);

                if (actionId == ID_SPLASH) {
                    Intent intent = new Intent(this, SplashActivity.class);
                    startActivity(intent);

                } else if (actionId == ID_MAIN) {
                    Toast.makeText(getApplicationContext(), "Main---> item selected", Toast.LENGTH_SHORT).show();
                } else if (actionId == ID_PROFILE) {
                    Toast.makeText(getApplicationContext(), "Profile---> item selected", Toast.LENGTH_SHORT).show();
                } else if (actionId == ID_PLAY) {
                    Toast.makeText(getApplicationContext(), "Play---> item selected", Toast.LENGTH_SHORT).show();
                } else if (actionId == ID_HELP) {
                    Toast.makeText(getApplicationContext(), "Help---> item selected", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getApplicationContext(), actionItem.getTitle() + " selected", Toast.LENGTH_SHORT).show();
                }
            }
        });

        mQuickAction.setOnDismissListener(new QuickAction.OnDismissListener() {
            @Override
            public void onDismiss() {
                Toast.makeText(getApplicationContext(), "Ups..dismissed", Toast.LENGTH_SHORT).show();
            }
        });

        menuBtn.setOnClickListener(new View.OnClickListener() {         
            @Override
            public void onClick(View v) {
                mQuickAction.show(v);
            }
        });

    }
}

它不喜欢从新开始的一切。

我觉得我遵循了 http://developer.android.com/training/basics/firstapp/starting-activity.html的指示

4

2 回答 2

6

您试图作为上下文传递的内容实际上是 onActionItemClickListener()行不通的。

应该使用getBaseContext().

Intent intent = new Intent(getBaseContext(), SplashActivity.class);

编辑: 或者你可以做

Intent intent = new Intent(MainActivity.this, SplashActivity.class);

于 2013-01-31T18:03:12.473 回答
4

在 Java 中,this是指包含代码的类的当前实例。

这里

 mQuickAction.setOnActionItemClickListener(new QuickAction.OnActionItemClickListener() {
        @Override
        public void onItemClick(QuickAction quickAction, int pos, int actionId) {
            ActionItem actionItem = quickAction.getActionItem(pos);

            if (actionId == ID_SPLASH) {
                Intent intent = new Intent(this, SplashActivity.class);
                startActivity(intent);

您正在 onItemClick 内部创建意图,它是 OnActionItemClickListener 类实例的一个方法。这被称为“匿名内部类”。匿名是因为它没有名称(与 不同public class MyClass),而内部是因为它只存在于声明它的类实例中。

this因此指的是点击监听器的实例。

相反,使用外部类的实例 - 你的 Activity。

Intent intent = new Intent(MainActivity.this, SplashActivity.class);

另一种思考方式是,您使用的 Intent 的构造函数需要一个 Context 作为第一个参数。

从文档:

Intent(Context packageContext, Class cls) 为特定组件创建意图。

由于 Activity 扩展了 Context,因此您的 Activity 是 Context 的一个实例。OnActionItemClickListener 是一个类,因此编译器会生成编译时错误。

于 2013-01-31T18:06:03.543 回答