在“适配器”上使用两个(或更多)父视图?

时间:2012-01-01 23:21:32

标签: android spinner android-spinner android-adapter

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

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

我现在想要一个简单而干净的解决方案是创建一个自己的Adapter-Class(例如派生自ArrayAdapter<CategoryPair>,其中CategoryPair是一个简单的类,它拥有一对父级和子级这个自己的适配器类处理所有逻辑以保持数据一致(在那里更简单)。

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

1 个答案:

答案 0 :(得分:1)

是的,没关系,没关系。每个视图应该使用适配器的不同实例(确保这一点),因此,除非您的适配器代码有问题且使用静态变量,否则一切都应该正常工作。