1

ArrayAdapter<ownDataType>是否可以使用一个适配器类(及其实例)(例如,两个(或更多)不同视图的自己的子类?

在我的Activity中,我有两个Spinner对象用于显示(和选择)相关数据:父类别列表和所选父类别的子类别列表。当然,当父类别更改时,子类别中的列表Spinner会更新(设置一个新的)。ArrayAdapter但是,我也希望能够在创建 Activity 时直接设置子类别(并自动选择父类别)。这使事情变得复杂。

我现在对一个简单而干净的解决方案的想法是创建一个自己的适配器类(例如,派生自ArrayAdapter<CategoryPair>,其中CategoryPair是一个包含一对父类和子类的简单类)并且这个自己的适配器类处理所有逻辑以保持数据一致(那里简单得多)。

在 -class 的getView(int position, View convertView, ViewGroup parent)方法中,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 回答