【问题标题】:Accessing new custom BaseAdapter function in Android在 Android 中访问新的自定义 BaseAdapter 函数
【发布时间】:2016-01-07 12:03:30
【问题描述】:

在我的主要活动中,我有一个类型为 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 可以正常工作,但我认为这不是一种明智的工作方式。

感谢任何帮助。

【问题讨论】:

  • 您可以保留对您的适配器的引用
  • 问题在于构建,因为目前 listview 需要一个 ListAdapter 类型的项目,因此它在构建时看不到自定义函数。
  • BaseAdapterListAdapter
  • 所以您正尝试从 CalendarListView 访问 CustomCalendarAdapter 中的自定义功能?

标签: android inheritance baseadapter horizontallistview


【解决方案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 一起使用之前,请确保您使用的任何适配器都实现了此接口。

【讨论】:

  • 谢谢。我从来没有考虑过! :)
  • 没问题!界面很棒!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
  • 2012-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多