2016-12-12 11 views
2

私は外部DBに従って1つ以上のスピナーを動的に作成する必要があるアクティビティを持っています。動的に作成されたいくつかのスピナーにsetOnItemSelectedListenerを設定する方法

このスピナーアイテムのSOmeは、スピナーが持つ価値に応じたダイアログを表示する必要があります。たとえば、スピナーには次のオプションがあります。 -Own -Rental -Family House ユーザーがレンタルを選択すると、1か月にどれくらい支払うかを尋ねるダイアログ(または何か)を表示する必要があります。彼が自分や家族を選ぶなら、何も起こらないはずです。問題は、私はこれを行う際に「setOnItemSelectedListenerは」唯一の最後のスピナーのため設定されることである

for(int q=0;q<=parent.getChildCount();q++){ 

     View v = parent.getChildAt(q); 
     if (v instanceof Spinner) { 
      Spinner res = (Spinner) v; 
      res.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
       public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
        //Here its supposed to show dialog if the option is "RENT" 
       } 

       public void onNothingSelected(AdapterView<?> adapterView) { 
        return; 
       } 
      }); 
     } 
    } 

:このようなものを使用して

私はスピナーでレイアウトを作成した後、edittextsなどイムレイアウト。

私は何をしようとすることができますか?私は他に何をするべきかわかりません。

答えて

0

おそらく最も簡単な解決策は、1つのリスナーを変数として作成し、それをすべてのスピナーに使用することです。これを行うには、あなたはこれを行うだろう代わりに、あなたは現在(匿名の内部クラスのスタイルを使用して)しているとして、それを設定していないでしょう。

//This goes outside of the method 
private AdapterView.OnItemSelectedListener listener = 
     new AdapterView.OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     System.out.println("Spinner Selected ID = " + parent.getId()); 
     /* 
     Put a check here for which one is being selected. 
     While you could use the parent to check, in your case, it will be easier 
     to use something from your DB table as a unique identifier (maybe a column 
     name would be ideal? Your pick) 
     */ 
     //Show your dialogs here 
    } 
    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 
     return; 
    } 
}; 

//This is the method you have where you are iterating the parent object 
private void doStuff(){ 
    for(int q=0;q<=parent.getChildCount();q++){ 
     View v = parent.getChildAt(q); 
     if (v instanceof Spinner) { 
      Spinner res = (Spinner) v; 
      res.setOnItemSelectedListener(listener); 
     } 
    } 
} 

幸運を屋へ!

+0

同じことが起こっています。最後のスピナーにのみ適用されます。 –

+0

私はちょうどいくつかのテストコードを書いており、それは私の最後に働いているようです。いくつかの質問は、クリックリスナーが登録していないという問題ですか?それとも、データがスピナーに正しく設定されていないのでしょうか?または、他の何か? – Silmarilos

+0

こんにちは、お返事ありがとうございます。問題は、クリックリスナーは最後のスピナーにのみ適用されることです。私は5-6スピナーを持っていることを意味します。リスナーは6番目のスピナーにのみ適用されます。リスナーはそのスピナーでのみ動作します。たとえば、リスナーがアイテムを印刷する場合は、最後のスピナーアイテムのみが印刷されます。 –

関連する問題