-1

アクティビティ名として文字列を含むスナックバーからアクティビティを開始しようとしています。アクティビティ名を変数としてアクティビティを開始する

スナックバーコードは次のとおりです。

private void showSnackbar(View view, String massgae, String action, final String intent) { 
    Snackbar.make(view, massgae, Snackbar.LENGTH_LONG) 
      .setAction(action, new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Intent myIntent = null; 
        try { 
         myIntent = new Intent(context, Class.forName(intent)); 
        } catch (ClassNotFoundException e) { 
         e.printStackTrace(); 
        } 
        startActivity(myIntent); 
       } 
      }) 
      .setActionTextColor(Color.WHITE) 
      .setDuration(5000) 
      .show(); 
} 

、私はこれでそれを呼んでいる:

のjava.lang.NullPointerExceptionを:それは私を得るロードすると

showSnackbar(llMain, getResources().getString(R.string.sbUserNotFound), getResources().getString(R.string.sbRegister), "Register.class"); 

:空のオブジェクト参照で仮想メソッド 'java.lang.String android.content.Intent.toString()'を呼び出そうとしました。

助けが必要ですか?

答えて

0

まず、それは悪い考えです。いいにくいのですが。 Class.forName()はそのように使用すべきではありません。

どのアクティビティを開始するかをカスタマイズしたい場合は、Classなどの変数を送信して汎用にします。

しかし、本当にこの実装に固執すると、完全なパッケージ名をClass.forName()に渡し、最後に ".class"を追加しなくてはならないためです。

だから、のようなもの:

もちろん
Class.forName("com.testapp.ui.Register"); 

、独自のアプリケーションに合うようにパッケージ名(複数可)を変更する必要があります。

+0

イムはかなり新しいアンドロイド開発とideはClass.fornameを提案しました。 より優れたソリューションですか? –

+0

@NirGolan文字列インテントを渡すのではなく、Class変数を渡してインテントコンストラクタに直接渡します。ありがとう、 –

+0

私はあなたの答えを赤くして理解しています。文字列インテントの代わりにクラスインテント。今働いている。ありがとう –

関連する問題