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

あなたのコードが間違っているとは思いませんが、新しいインテントを呼び出すときに単純化できます:

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 に答える
2

Class OurClass = Class.forName("com.wad.tourismguide.AboutCity");target を設定するために を使用する特定の理由がない限り、Class( を使用して) Intent を介して別のアクティビティを呼び出す従来の方法は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/17Class OurClass = Class.forName("com.wad.tourismguide.AboutCity"); 、私はまったく必要ないと思う傾向があります。ただし、これについて間違っている場合は、誰かが私を修正できます。

于 2012-11-15T05:21:34.217 に答える
0

開始する現在のアクティビティクラスとアクティビティクラスをコンストラクターに渡すだけです。

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