【问题标题】:Use one adapter for two ListViews is it good practice..?对两个 ListView 使用一个适配器是一种好习惯吗?
【发布时间】:2017-01-20 18:55:38
【问题描述】:

我有一个列表,我想在两个片段中以不同的方式显示。 这意味着我需要两个 ListView(每个片段中一个),但我还需要两个适配器吗?或者我可以简单地为两个列表使用一个适配器,因为当数据更改时,我希望这两个列表更新。

编辑:显示不同意味着我想在第一个片段和第二个片段的日历中显示按字母顺序排序的任务。

(或者也许有更简单的方法来解决这个问题?)

适配器:

public class TasksAdapter extends ArrayAdapter<Task> {

    public TasksAdapter(Context context, ArrayList<Task> tasks) {
        super(context, 0, tasks);
    }

    @Override
    public View getView(int position, View convertView, @NonNull ViewGroup parent) {
        Task task = getItem(position);

        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_task, parent, false);
        }

        return convertView;
    }
}

【问题讨论】:

  • 试试吧。这听起来不是一个好习惯,但你甚至可以尝试
  • 您能多解释一下“以不同方式显示”是什么意思吗?
  • 请记住,您可以简单地创建同一个适配器类的 2 个实例而不考虑这个问题
  • 并将您当前的适配器代码添加到您的问题中
  • 这可能是解决此问题的最简单方法,但听起来像是重复,意味着每次列表更改时我都必须更新两个适配器。

标签: android listview android-fragments android-adapter


【解决方案1】:

是的,如果适配器的构建方式能够容纳您要在两个Fragment 中使用的数据类型,那么您当然可以使用单个适配器。

这取决于您想要完成的具体目标,但这里有一些事情需要考虑:

  • 只需实例化适配器的两个单独实例,并将实例传递给您的ListViewRecyclerView.setAdapter 方法。
  • 您可以在适配器中以编程方式使用不同的视图持有者,请查看getItemViewType() 方法。
  • 如果您的适配器中的数据不仅仅是简单的原语,请考虑编写一个模型类来对您正在使用的两种数据类型的列表对象进行建模。

请注意,您可能应该使用RecyclerView

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 2019-03-06
    • 2013-03-30
    • 2015-09-02
    相关资源
    最近更新 更多