startActivity方法不会在实际设备中启动新活动

时间:2012-11-15 05:08:19

标签: android android-intent android-activity start-activity

我是Android的初学者。我试图通过onclick事件中的意图开始一个新的活动。这在模拟器中工作正常。但是当我在真实设备中尝试它时,它不起作用,应用程序再次进入主屏幕。 logcat中没有显示错误。

这是我调用startActivity方法的地方。

relativeAbout.setOnClickListener(new View.OnClickListener() {


        public void onClick(View v) {
            // TODO Auto-generated method stub
            try {
                Class OurClass = Class
                        .forName("com.wad.tourismguide.AboutCity");
                Intent newIntent = new Intent(getApplicationContext(),
                        OurClass);


                newIntent.putExtra("name", name);
                newIntent.putExtra("detail", detail);
                newIntent.putExtra("image", main);
                startActivity(newIntent);



                System.out.println("intent starting");
            } catch (ClassNotFoundException e) {
                // TODO: handle exception
                e.printStackTrace();
            }
        }
    });

新活动如下所示。

    public class AboutCity extends Activity {
    TextView cityName;
    ImageView image;
    TextView detailText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        setContentView(R.layout.aboutcity);

        cityName = (TextView)findViewById(R.id.tvDetailCityName);
        image = (ImageView)findViewById(R.id.ivDetailImage);
        detailText = (TextView)findViewById(R.id.tvDetailText);

        String name = getIntent().getStringExtra("name");
        System.out.println("city name"+ name);
        String detail = getIntent().getStringExtra("detail");
        System.out.println("city detail"+ detail);
        Bitmap b= (Bitmap)getIntent().getParcelableExtra("image");
        System.out.println(detail);
        cityName.setText(name);
        detailText.setText(detail);
        image.setImageBitmap(b);
    }


}

正如我之前解释的那样,这在模拟器中运行良好。但它在真实设备中不起作用。我无法找到我错的地方。有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:2)

除非有特定原因要使用Class OurClass = Class.forName("com.wad.tourismguide.AboutCity");设置目标Class,否则通过Intent(使用Extras)调用其他活动的传统方式将按宣传方式工作。< / p>

Intent newIntent = new Intent(getApplicationContext(), AboutCity.class);
newIntent.putExtra("name", name);
newIntent.putExtra("detail", detail);
newIntent.putExtra("image", main);
startActivity(newIntent);

您还可以尝试另一种基本上可用作上述代码的变体:

Intent newIntent = new Intent();
newIntent.setClass(getApplicationContext(), AboutCity.class);
newIntent.putExtra("name", name);
newIntent.putExtra("detail", detail);
newIntent.putExtra("image", main);
startActivity(newIntent);

编辑:在阅读完本文之后:http://www.xyzws.com/Javafaq/what-does-classforname-method-do/17,我倾向于认为根本不需要Class OurClass = Class.forName("com.wad.tourismguide.AboutCity");。如果我错了,有人可以纠正我。

答案 1 :(得分:2)

我不认为你的代码是错的,但你可以在调用新的Intent时简单:

Intent newIntent = new Intent(CurrentActivity.this, AboutCity.class);
newIntent.putExtra("name", name);
newIntent.putExtra("detail", detail);
newIntent.putExtra("image", main);
startActivity(newIntent);

毕竟你的代码会更清晰,你不需要看到异常(错误几率更低)。

答案 2 :(得分:0)

只需将您想要启动的当前活动类和活动类传递给构造函数:

Intent intent = new Intent(CurrentActivity.this, AboutCity.class);
// put extra
startActivity(intent);