2016-11-28 6 views
0

アプリの画面の1つに、ユーザーを別の画面にするボタンがあります。宛先画面は、SharedPreferencesに格納されている設定によって決まります。インテントのクラスを共有設定からどのように設定するのですか? 場合R.id.action_favorite_1:SharedPreferencesを使用してインテントのクラス値を設定する

これは私がボタンを持っているものを現在:

case R.id.favoriteButton1: 
       final Intent favorite1Screen = new Intent(); 
       favorite1Screen.setClass(this, prefs.getString("favorite1Class", "")); 
       startActivity(favorite1Screen); 
       break; 

そして、これは、その優先順位を設定することができます画面の一つである

  final SharedPreferences prefs2 = getSharedPreferences("myDataStorage", MODE_PRIVATE); 
      final SharedPreferences.Editor nEditor = prefs2.edit(); 

      nEditor.putString("favorite1Text", "Job Hazard Analysis"); 
      nEditor.putString("favorite1Color", "Safety"); 
      nEditor.putString("favorite1Intent", "Job_Hazard_Analysis"); 
      nEditor.commit(); 

      break; 

その意図は明らかにそのクラスを設定する文字列値を受け入れません。私はこの作業を行う方法がありますか?あなたはしかしsetClass方法でそれをやり続けることができ

Intent intent = new Intent(this, YourClass.class);

+1

Intent intent = new Intent(this, 'com.mypackage.myclass_name');

またはそれは試して動作しない場合

私はこれをお勧めしません。 *外部入力を使用してクラス名を直接作成すると、セキュリティ上の問題が発生します。予期しない値を無視できるように、文字列からJavaの 'Class'(静的な' HashMap 'など)にマップするための検証ロジックを使用してください。 – CommonsWare

答えて

0

あなたも、セットアップ、このような意図コンストラクタからコンテキストとクラスすることができます。私はエラーがクラス参照がどのように解釈されるかもしれないと思う。

あなたのクラス名文字列は完全修飾クラス名である必要があります。パッケージを意味し、すべて明示されなければなりません。同様に:あなたが共有環境設定で1は、あなたが試すことができたら次に

`com.mypackage.myclass_name` 

Intent intent = new Intent(this, Class.forName('com.mypackage.myclass_name'));

+0

これらのメソッドはすべて試行しましたが、クラス名を割り当てるための有効な入力メソッドとして文字列を受け入れないという問題は依然として残ります。 – Xander

+0

私の謝罪実際に問題を解決した単純なエラーを作り出していました。 – Xander

+0

@ xanderお役立ち情報そこに幸運。 – MarkSkayff

関連する問題