1

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);
    }
4

1 に答える 1

1

うん、それは大丈夫です。各ビューはアダプタの異なるインスタンスを使用する必要があります(これを確認してください)。したがって、アダプタコードにバグがあり、静的変数を使用しない限り、すべてが正常に機能するはずです。

于 2012-01-02T02:46:56.390 に答える