ArrayAdapter<ownDataType>
1つのアダプタクラス(およびそのインスタンス)を使用することは可能ですか(たとえば、2つ(またはそれ以上)の異なるビューの独自のサブクラス)?
私Activity
の中には、関連データを表示(および選択)するために使用される2つのSpinner
オブジェクトがあります。親カテゴリのリストと、選択した親カテゴリのサブカテゴリのリストです。もちろん、親カテゴリが変更されると、サブカテゴリ-のリストSpinner
が更新されます(新しいを設定します)。ArrayAdapter
ただし、アクティビティの作成時にサブカテゴリを直接設定できるようにしたい(そして親カテゴリを自動的に選択できるようにしたい)。これは物事を複雑にします。
シンプルでクリーンなソリューションについての私の考えは、1つの独自のAdapter-Class(たとえば、から派生したArrayAdapter<CategoryPair>
、CategoryPair
は親とサブカテゴリのペアを保持する単純なクラス)を作成することであり、この独自のアダプタクラスは保持するすべてのロジックを処理しますデータの一貫性(そこでははるかに単純です)。
-classのgetView(int position, View convertView, ViewGroup parent)
メソッドでは、アクティビティ内の2つのオブジェクトのどちらに対してビューを作成する必要がAdapter
あるかを確実に認識する必要があります。Spinner
parent
パラメータを信頼できますか?
私の考えは良いものだと思いますか?
編集:コード例:
私のアダプタークラス:
public class CategoryPair
{
Category parent;
Category sub;
}
public class CategoriesAdapter extends ArrayAdapter<CategoryPair> {
private Spinner parentSpinner;
private Spinner subSpinner;
public CategoriesAdapter(Context context, int textViewResourceId, Spinner par, Spinner sub) {
super(context, textViewResourceId);
parentSpinner = par;
subSpinner = sub;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (parent == parentSpinner)
{
//
}
else if (parent == subSpinner)
{
//
}
else
{
Log.e(TAG, "Invalid parent in CategoriesAdapter");
}
return super.getView(position, convertView, parent);
}