0

我是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);
    }


}

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

4

3 回答 3

2

除非有特定原因使用Class OurClass = Class.forName("com.wad.tourismguide.AboutCity");来设置 target Class,否则通过 Intent (with Extras) 调用另一个活动的传统方式将像宣传的那样工作。

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");根本不需要。如果我在这方面错了,有人可以纠正我。

于 2012-11-15T05:21:34.217 回答
2

我认为您的代码没有错,但是您可以在调用新 Intent 时对其进行简单化:

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

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

于 2012-11-16T01:43:16.847 回答
0

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

Intent intent = new Intent(CurrentActivity.this, AboutCity.class);
// put extra
startActivity(intent);
于 2012-11-15T05:43:41.000 回答