0

私は現在リストビューを持っており、リストビューを別のアクティビティに誘導しようとしています。つまり、アイテムをクリックして1-4と言うと、それに対応するクラスが得られます。私がそれを行うと考えることができる唯一の方法は、リストビュー内の項目のテキストを取得し、その名前のアクティビティを開始することです。そのコードは次のようになります。変数であるAndroidでインテントを呼び出す

final String chosen = ""; 
chosen = (String) ((TextView) view).getText(); 
Intent nextScreen = new Intent(getApplicationContext(), chosen.class); 

これは動作しません。最後の行には、選択したものを型に解決できないというエラーが表示されます。

Log.d("Debug", "Test"+((TextView) view).getText()); 

は私にlogcatで正しい選択したアイテムを与えるので、私はその((TextView) view).getText()作品を知っています。

アイデア/提案はありますか?おかげで事前

EDITに:

私はこれに私のコードを変更してみました:

String chosen = (String) ((TextView) view).getText(); 
try { 
    Intent nextScreen = new Intent(getApplicationContext(), Class.forName(chosen)); 
    startActivity(nextScreen); 
    Log.d("Debug", "Good"+((TextView) view).getText()); 
    } 
catch (ClassNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    Log.d("Debug", "Bad"+((TextView) view).getText()); 
    } 
    Log.d("Debug", "Final"+((TextView) view).getText()); 

ログの猫は私に

BadItem1 
FinalItem1 

の出力を与えた私はつもりだと思いますこれについて誰かが指摘したように間違ったやり方です。私はOnItemClickListenerを使うべきだとも思っています。私はそれを試し、今後のより簡単なヘルプのために私の結果を掲載します。

+0

、それはあなたを助けましたあなただけの文脈 – Blundell

答えて

1

エラーはここにある:

final String chosen = ""; 
chosen = (String) ((TextView) view).getText(); 

あなたが最終的に選ば宣言しているので、あなたは一度だけそれに値を割り当てることができます

final String chosen = (String) ((TextView) view).getText(); 

は、さらに私は、あなたが持って活動を開始したいとします選択された変数に格納されている名前。このためにselected.classを書くことはできません。これを行う正しい方法は次のとおりです。

Class.forName(chosen); 

+0

としてから来たアクティビティを使用します。これは何が必要でしょうか? –

+0

私はこの質問からずっと学んだことがあります。 –

0

Intentコンストラクタがありません。ContextStringが必要です。 Intentコンストラクタへの呼び出しでおそらくClass.forName(chosen)のようなことをすることができます。

0

変数の.classを呼び出すと、変数の内容のクラスではなく、その変数のクラスが取得されます。

ListViewOnItemClickListenerを使用して、クリックしたアイテムを識別する必要があると思います。 positionパラメータ、またはgetItemAtPosition(position)を呼び出すだけで、リストビュー内の項目を一意に識別し、適切なアクティビティを呼び出すことができます。ここ

参照ドキュメント:http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html

0

Factoryしてください。

このようにすると、クラス名をユーザーが読んでいるテキストに結びつける必要がなくなります。より柔軟な/より優れたユーザーエクスペリエンス/維持しやすいコードを提供します。 separation of concernsもお手伝いします。

class NavFactory { 
    private static final int CLASS_FIRST = 1;  

    public static Intent getNavIntent(Context context, String name){ 
     switch(getId(name)){ 
       case CLASS_FIRST: 
        return new Intent(context, FirstClass.class); 
       default: 
        return null; 
     } 
    } 

    private static int getId(String name){ 
     if("listItemOneText".equals(name) 
      return CLASS_FIRST; 

     return -1; 
    } 


} 

参考:お使いの場合にはJava Factory Pattern

String chosen = (String) ((TextView) view).getText(); 
Intent nextScreen = NavFactory.getNavIntent(this, chosen); 
0

は新しいはずActivityclassとしてStringを送っています。アプリケーション・コンテキストを使用しないでください

final String chosen = ""; 
chosen = ((TextView) view).getText(); 
Class<?> chosenActivity = Class.forName(chosen); 
Intent nextScreen = new Intent(this, chosenActivity); 
関連する問題