2016-12-10 5 views
1

問題は私が持っていることは、逸話の輪を再発明するのではなく、 私はSpinnersとListViewのレイアウトを同じにしたいのですが、リストは同じデータに基づいています。スピナーとリストビューの両方に1つのレイアウトを効果的に活用できますか?

また、現在のコアアクティビティ()に従ってコード化された行の色と色が交互に変わるリスト(SpinnersとListViews)など、App全体に似たカスタム表示が必要です。

たとえば、また

ListView for Shops

私のアプリ:私のアプリはListView(ShopName、ShopCityとShopOrder)にリストとして表示ショップ(コア活性)を有し、このために使用されるレイアウトに従って、R.layout.shoplistありますAisles(別のコアアクティビティ、色が異なる)があります。通路のリストはショップの1つに限定されていますので、Spinnerが組み込まれ、それぞれの通路を選択するために利用可能なショップが記載されています。アイルのリストには、現在スピナーせずに、次のようになります -

ListView for Aisles without Spinner

私は単に(場所ごとにショップリストアダプタを使用することにより、スピナーのアダプタでスピナーのためのショップリストリストビューのアイテムのレイアウトを指定することができることを知っていますsclcsrは、すべてのお店を含むcusrorで、selectshoplistはスピナー)である: -

 slcsr = dbshopmethods.getShops("", shopsorderby); 
     selectshoplistadapter = new AdapterShopList(this, 
       slcsr, 
       CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER, 
       getIntent(), 
       true, 
       false 
     ); 
     selectshoplist.setAdapter(selectshoplistadapter); 

注意!標準アダプタよりも3つ余分なパラメータがあります。Intentが渡されます(intが抽出され、使用される色の範囲を決定するために使用されます)。booleanListViewではなくSpinnerからの呼び出しを示すフラグです。第二は、余分なデータを表示するかどうかを示すために使用される)

しかし、結果は次のとおりです。 - カスタマイズがスピナーのドロップダウンリストに欠けているされて

Aislelist with spinner directly using the Shoplist layout

このような質問になりましたドロップダウンの背景色を設定するにはどうすればよいですか

 int evenrow = ActionColorCoding.setHeadingColor(ctxt, 
       callerintent, 
       ActionColorCoding.getColorsPerGroup() - 1 
       ) & ActionColorCoding.transparency_evenrow; 
     int oddrow = evenrow & ActionColorCoding.transparency_oddrow; 
     if (position % 2 == 0) { 
      view.setBackgroundColor(evenrow); 
     } else { 
      view.setBackgroundColor(oddrow); 
     } 

ので、上記のコードに基づいだろう - は:

注私はあたりとして、特殊なアダプタのgetView方法で色を適用/ detreminingためのクラス(ActionColorCoding)と方法論を持っていますアダプターに組み込むことができます。 Spinnnerの選択/選択されたアイテムの執筆は、アクティビティのレイアウトにおけるSpinnerの宣言によるものであるため、問題はありません。

注、この質問の意図は、

+0

いくつかの分を与えます返信する他の人に:) –

+0

@MehdiKhademlooボトム。その答えは分かっている。質問は他の人のためのガイドとして提供されています。したがって、AskandAnswerオプションの使用は、質問をするときに利用できます。 – MikeT

答えて

1

スピナーの実際に持っている2つのレイアウトのための答えがあるように表示されていないことを技術のために他の人への支援であってもよいガイドとしてあります、それらに関連付けられた第2のレイアウトは、DropDownViewするためのものとがオーバーライド(リストビューは、getViewメソッドを呼び出すしながら)場合、方法getDropDownViewを呼び出します。注意すべき

一つはgetDropDownViewが呼び出された場合は、それを起動する必要がありますので、その後bindViewが呼び出されていない、ということです。 ListViewアダプタに以下を追加することにより

アダプタがListViewに応じるだろうとSpinner: -

@Override 
    public View getDropDownView(int position, View convertview, ViewGroup parent) { 
     super.getDropDownView(position, convertview, parent); 
     View view = convertview; 
     if (fromspinner) { 
      int cpos = this.cursor.getPosition(); 
      view = View.inflate(ctxt,R.layout.shoplist,null); 
      int evenrow = ActionColorCoding.setHeadingColor(ctxt,callerintent, ActionColorCoding.getColorsPerGroup() - 1) & ActionColorCoding.transparency_evenrow; 
      int oddrow = evenrow & ActionColorCoding.transparency_oddrow; 
      if (position % 2 == 0) { 
       view.setBackgroundColor(evenrow); 
      } else { 
       view.setBackgroundColor(oddrow); 
      } 
      this.cursor.moveToPosition(position); 
     } 
     bindView(view, ctxt, this.cursor); 
     return view; 
    } 

注意!私は**if (fromspinner)**構成が必要であるとは思っていませんが、予防措置として含まれています。

その他の注記callng super.getDropDownView(position, convertview, parent);は必須ではないと思われるため、おそらく最善の注意が必要です。

注! ctxtcalleritentfromspinnercursorがあたりとして特殊なアダプタのコンストラクタで設定されている: -

AdapterShopList(Context context,Cursor csr, int flags, Intent intent, boolean fromspinner,boolean showdetails) { 
     super(context, csr, 0); 
     ctxt = context; 
     callerintent = intent; 
     this.fromspinner = fromspinner; 
     this.cursor = csr; 
     setShopOffsets(csr); 
    } 

あなたが得る結果は次のとおりです。 -

enter image description here

+0

余分な 'super.getDropDownView'を呼び出すという追加の注釈を追加しました。 – MikeT

関連する問題