在Android

时间:2016-01-07 12:03:31

标签: android inheritance baseadapter horizontallistview

在我的主要活动中,我有一个类型为HorizontalListView(自定义)的calendarListView。

此适配器的设置如下:

calendarListView.setAdapter(new CustomCalendarAdapter(this, listArrayX, listArrayY));

这很好用,我可以访问CustomCalendarAdapter中的所有函数,因为默认情况下它们只是覆盖基本适配器。

由于适配器被传递到listview类,因此Horizo​​ntalListView本身对CustomCalendarAdapter一无所知,即只要函数存在于基本适配器类中,它就构建得很好。

现在,在自定义日历适配器中,我添加了一个新功能。

所以,例如:

public class CustomCalendarAdapter extends BaseAdapter{

...

public int getItemDate()
{
    return 5;
}

如何从Horizo​​ntalListView中访问该功能?

我正在尝试使用mAdapter.getItemDate。

(mAdapter在setAdapter函数中设置)

    @Override
    public void setAdapter(ListAdapter adapter) {
        if (mAdapter != null) {
            mAdapter.unregisterDataSetObserver(mDataObserver);
        }
        mAdapter = adapter;
        mAdapter.registerDataSetObserver(mDataObserver);
        mDataChanged = true;
        requestLayout();
//      reset();
    }

正如我所提到的,适配器是在setAdapter中传入的,所以在构建时不能理解CustomCalendarAdapter中的函数。

我能想到的唯一方法是将CustomCalendarAdapter硬连线到Horizo​​ntalListView,我宁愿不这样做!

这样做,即将ListAdapter的所有实例更改为CustomCalendarAdapter都能正常工作,但是我认为这不是一种明智的工作方式。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我要做的是将自定义功能放入界面

public interface CustomAdapterFunctions {
    int getItemDate();
}

然后在setAdapter方法内部,将ListAdapter强制转换为CustomAdapterFunctions

try {
    CustomAdapterFunctions custom = (CustomAdapterFunctions) listAdapter;
catch (ClassCastException ex){
    throw new ClassCastException("Adapters must implement CustomAdapterFunctions!");
}

确保您使用的任何适配器在与CalendarListView一起使用之前实现此接口。