2011-07-26 11 views
1

カスタムArrayAdapterを作成したので、ドロップダウンメニューの外観を変更できます。ドロップダウンがどのスピナーに属しているかに応じて、ビューを操作したい。私はparent.getTag()のようなことをすることができると思ったが、nullを返す。アンドロイドのgetDropDownViewメソッドからスピナーIDまたはタグを取得する方法

カスタムアレイアダプタは次のようになります。

class BackgroundColorAdapter extends ArrayAdapter<String> { 
    BackgroundColorAdapter() { 
     super(SettingsActivity.this, R.layout.settings_spinner_item, R.id.item_text, textColors); 
    } 

    public View getDropDownView (int position, View convertView, ViewGroup parent){ 
     View row=super.getView(position, convertView, parent); 
     if(parent.getTag().equals("background"){ 
      //Do custom stuff here 
     } 
     return(row); 
    } 
} 

と私はタグを設定しています:

settingsSpinner.setTag("bg_color_spinner"); 
settingsSpinner.setAdapter(new BackgroundColorAdapter()); 

私は、ビュー階層がどのように機能するか混乱しているが、それはすることを論理的と思われると思いますスピナードロップダウンの親がスピナーになります。誰でもドロップダウンがgetDropDownViewでどのスピナーに属しているかを知ることができますか?

編集:settingsSpinner単一スピナーの代わり

答えて

2

最終的にこれが機能するようになっています。たとえば、ドロップダウンの各項目のテキストフォントを変更するコードがあります。

class TextSizeAdapter extends ArrayAdapter<String> { 

     TextSizeAdapter() { 
      super(SettingsActivity.this, R.layout.settings_spinner_item, R.id.item_text, textSizes); 
     } 

     public View getDropDownView (int position, View convertView, ViewGroup parent){ 

      View row=super.getView(position, convertView, parent); 
      TextView text = (TextView)row.findViewById(R.id.item_text); 
      text.setTextSize(TypedValue.COMPLEX_UNIT_PX,appState.FONTSIZES[position]); 
      RadioButton radio = (RadioButton)row.findViewById(R.id.item_radio); 
      if(settingsSpinners[2].getSelectedItemPosition() == position){ 
       radio.setChecked(true); 
      }else{ 
       radio.setChecked(false); 
      } 

      return(row); 
     } 
    } 
+0

Thanks saved my day – kgandroid

0

私はgetDropDownView(と不慣れだ)、それはあまり混乱にするスピナーの配列を作り、あなたがそれを使用する理由がわかりません。 getDropDownViewのドキュメントは()親については、次の状態:

このビューは、最終的にこれは、あなたが探している「親」のような音はありません

に添付されますことを、親

public Spinner mParent = null; 

public View getView (int position, View convertView, ViewGroup parent) 
{ 
    this.mParent = parent; 
    return super.getView(position, convertView, parent); 
} 

public View getDropDownView(int position, View convertView, ViewGroup parent) 
{ // Your code here -> but use 'mParent' 
} 

:のために... getViewメソッド()の呼び出しで「親」以来 あなたはそれが以下のように親のインスタンス変数を格納するために使用することができ、実際にスピナーです私は試していませんが、必要なものを得るための回避策かもしれません。あなたが解決策を見つけたら教えてください。

+0

私はスピナーのドロップダウンメニューの各項目のカスタムビューを作成しているため、getDropDownViewを使用しています。これに対してgetView()は機能しません。 – odiggity

+0

私は自分の答えを変えました。私たちが実行できる完全なコード例を投稿して、あなたが得ているものを正確に見ることは可能でしょうか?ありがとう – Entreco

+0

これはおそらく動作しますが、私は親ViewGroupをgetDropDownViewに持っているようです。これはスピナー項目がどのスピナーに属しているかを本当に簡単に知ることができるはずです。さもなければ、メソッドに親を含める点は何か。私は、私が逃している階層で明白な何かがあるように感じる。私がより良い答えを見つけることができないなら、私はこれを正しいものとしてマークします。ありがとうEntreco。 – odiggity

関連する問題