0

たとえば、resultPhone から返された名前のアクティビティに移動したい: 現在の電話名は GalaxyS3 で、GalaxyS3.class に移動したい。どうやってやるの?

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    String[] supportedPhone = getResources().getStringArray(R.array.supported_phone);
    String[] supportedVersion = getResources().getStringArray(R.array.supported_version);
    String currentPhone = android.os.Build.MODEL;
    String currentVersion = android.os.Build.VERSION.RELEASE;

    for(String cP : supportedPhone) {
        String resultPhone = cP;
        for(String cV : supportedVersion) {
            String resultVersion = cV;
            if ((currentPhone.equalsIgnoreCase(resultPhone)) && (currentVersion.equalsIgnoreCase(resultVersion))) {
                Intent gotoPhoneDetail = new Intent(this, "resultPhone" + ".class");
                startActivity(gotoPhoneDetail);
                // how can i make this go to the activity with the name return from resultPhone?
            } else {
                setContentView(R.layout.phone_checker); 
            }
        }
    }
}
4

6 に答える 6

3

インテントsetClassName()を使用できます。これは間違いなくソリューションに適合します。

Intent gotoPhoneDetail = new Intent(getApplicationContext());
gotoPhoneDetail.setClassName(getApplicationContext(), getApplicationContext().getPackageName()+"."+resultPhone);

注:クラスが存在し、Androidマニフェストファイルにエントリが含まれている必要があります

于 2012-08-30T06:32:50.337 に答える
0

これはダメだと思います。最初にマニフェストファイルにアクティビティを登録する必要があることを忘れないでください。それをどのように実装する予定ですか?

于 2012-08-30T06:24:33.457 に答える
0

Class.forName(resultPhone) を使用すると Class オブジェクトが得られ、ここで多くの人がすでに提案しているように、それをインテントで使用できます。ただし、使用するロジックはエラーが発生しやすく、長期的には適切ではない可能性があります。Class オブジェクトを取得するには、「ファクトリ クラス」を使用することをお勧めします。

そうすれば、モデルがサポートされていない場合は、将来的にサポートする電話を追加したり、デフォルトのクラスを追加したりできます。ファクトリ クラスは次のようになります。

  class PhoneModelClassFactory{
      public static Class getPhoneModel(String className){

         if (className.equals("GS3")) return GS3.class
         else if(className.equals("GS4")) return GS4.class
         // add more here
         else  return DefaultPhoneModel.class
      }
  }

これで、メソッド内から呼び出すことができます

       Class phoneClass = PhoneModelClassFactory.getPhoneModel(currentPhone);
       Intent i = new Intent(this, phoneClass);
       startActivity(i);
于 2012-08-30T07:26:51.473 に答える
0

次のメソッドを使用して、その名前からクラス オブジェクトを取得できるはずです。

Class.forName ( className );

ここで、className はクラス名を保持する文字列です (この場合は resultPhone です)。

以下を試してください:

try {
    Class <?> myActivity = Class.forName ( resultPhone );
    Intent intent = new Intent ( this , myActivity );
    startActivity ( intent );
} catch (ClassNotFoundException e) {
    e.printStackTrace();
    // Do something else, maybe warn the user that the application does not support his/her phone ...
}

そして、それがうまくいくかどうか教えてください。

于 2012-08-30T06:33:46.930 に答える
0

Class.forName()を使用する必要があります。

if ((currentPhone.equalsIgnoreCase(resultPhone)) && (currentVersion.equalsIgnoreCase(resultVersion))) {

    Class<?> phoneClass = null;
    try {
        phoneClass = Class.forName(resultPhone);
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Intent gotoPhoneDetail = new Intent(this, phoneClass);
    startActivity(gotoPhoneDetail);

}
于 2012-08-30T06:39:34.787 に答える
0

メソッドを使用startActivity()して任意のactivity.

 Intent intent = new Intent(YourCurrentActivity.this,YourNewActivity.class); // In your case GalaxyS3.class
 startActivity(intent); // Like this you can start Activity.

そして、AndroidMenifestファイル内のapplicationタグの下に常に新しいアクティビティの名前を記載してください。

于 2012-08-30T06:26:21.547 に答える