问题标签 [android-adapter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
376 浏览

android - 如何为画廊切换适配器

我可以动态切换画廊的适配器吗?

onCreate()我的活动中,我这样做了:

然后在我的代码中,我做到了

我试过了,但是在模拟器中,当我再次执行“setAdapter”时,myGallery 永远不会更新。如何强制 myGallery 在使用适配器 1 时释放所有项目,然后让它为另一个适配器 1 重新填充项目?

谢谢你。

0 投票
10 回答
101357 浏览

android - 适配器在 Android 中的作用是什么?

我想知道在Android 的上下文中何时地以及如何使用适配器。

Android 开发者文档中的信息对我来说是不够的,我想得到更详细的分析。

0 投票
1 回答
1139 浏览

android - 为什么不填充 listView?

我试图做一件非常简单的事情(显示一个填充的列表视图),但我做不到。我的代码不起作用,我找不到问题所在,所以我希望其他人可以帮助我:)

我定义了 listView 的 XML:

活动:

当我启动应用程序时,一切正常,显示了 XML 的 TextView,但没有 ListView 的迹象……我错过了什么吗?

0 投票
4 回答
18594 浏览

android - 无法在自定义适配器中使用 LayoutInflater

我正在考虑编写一个自定义适配器来填充每行 3 个文本视图的列表视图。我找到了相当多的示例代码来执行此操作,但似乎最好的一个位于:http ://www.anddev.org/custom_widget_adapters-t1796.html

经过一些小的调整以修复最新的 Android SDK 的一些编译器问题,我让它运行,只是得到了异常:

错误/AndroidRuntime(281): java.lang.UnsupportedOperationException: addView(View, LayoutParams) 在 AdapterView 中不受支持

所以我做了很多研究,发现了很多可能的原因和解决方法。这些都没有改变任何事情。我的适配器代码目前是:

所以我尝试了获取充气机的注释方法,以及当前未注释的方法。我尝试将“父级”传递给 inflate 和 null,并传递“true”、“false”并完全省略最后一个参数。他们都没有奏效,到目前为止我发现的所有例子都是2008年的,我觉得有点过时了。

如果有人可以帮助解决这个问题,那么我很乐意解决这个问题。

0 投票
1 回答
4276 浏览

android - 如何修复动态适配器包装器 Android 中的 notifyDataSetChanged/ListView 问题

摘要:尝试通过自定义适配器包装器将标题行动态添加到 ListView。ListView 无法保持滚动位置同步。提供可运行的演示项目。

我想根据 CursorAdapter 中的值将项目动态添加到列表中,在用户当前查看的内容之前几个位置。为此,我有一个适配器,它包装 CursorAdapter 并将新内容索引在 SparseArray 中。将项目添加到自定义适配器时需要更新 ListView,但我遇到了很多试图让它工作的陷阱,并且希望得到一些建议。

演示项目可以在这里下载:DynamicSectionedList.zip

在演示中,通过向前看 10 个位置来动态添加标题,以找到列表项切换到下一个字母的正确位置。notifyDataSetChanged 的​​每个实现都存在如下问题:

Demo 1 这个Demo展示了notifyDataSetChanged()的重要性。单击任何内容时,应用程序都会崩溃。这是由于 ListView 中的一些健全性检查mItemCount != adapter.getItemCount()...。道德是,我们需要通知列表数据已更改。

Demo 2 下一步自然是在发生更改时通知 ListView 更改。不幸的是,在 ListView 滚动时这样做会破坏所有触摸交互,直到应用程序退出触摸模式。您需要“滚动”足够远以生成新标题才能注意到这一点。点击屏幕不会导致滚动停止,一旦停止,列表项将不可点击。这是由于if (!mDataChanged) { /* do very important stuff */ }AbsListView.onTouchEvent() 中的一些代码造成的。

Demo 3 为了解决这个问题,Demo 3 引入了一个 pendingChanges 标志,并且自定义 Adapter 获得了一个 notifyDataSetChangedIfNeeded(),一旦 ListView 进入“安全”状态以进行更改,就可以调用它。必须通知更改的第一点是在 ListView.layoutChildren() 中,因此我重写了该方法,以便在需要时首先通知更改,然后调用。跳过至少一个标题,然后单击一个列表项。

尽管我不完全确定为什么,但这并不完全正确。使用键盘/轨迹球点击或选择一个项目会导致列表刷新,而不会正确同步旧位置。它滚动到列表的顶部,这是不可接受的。

Demo 4 Demo 3 中的滚动问题是可以解决的,至少在触摸模式下是可以的。通过在触摸时添加对 notifyDataSetChangedIfNeeded() 的调用,数据更改恰好发生在所有触摸交互按预期工作并且列表位置正确同步的时间。

但是,当设备不处于触摸模式时,我找不到类似的东西,更不用说它绝对看起来像是一个黑客。该列表几乎总是滚动回顶部,我无法找出导致它偶尔保持正确位置的原因。

由于 Android 在每一步都在与我作斗争,我觉得应该有更好的方法。请尝试演示,如果可以应用任何修复以使其正常工作,那就太好了!

非常感谢任何可以对此进行研究的人,希望如果我们可以使代码正常工作,它将对其他尝试对带有标题的列表进行相同优化的人有用。

0 投票
1 回答
5086 浏览

android - 如何使用 ListAdapter 在 ListView 中打印数据

更新

我正在尝试在列表视图上打印从数据库中检索到的数据。有一段时间,我的应用程序为数据库中的每个数据打印列表视图上的一行。所以如果数据库中有 10 条数据,app 打印 10 行,对应数据库的每一行。这是如何打印的视图。

它现在看起来的新图像:

替代文字

但是,它没有按我的意愿打印数据。我想在特定的文本视图中打印该行的一列,但它没有显示任何内容。

因此,活动 RatedCalss 调用该方法selectTopCalls()并使 List 接收该方法返回的列表。然后我将此列表传递给 listAdapter。

好吧,我有这个名为RatedCalls.java的活动:

我有这个类,一个名为MyListAdapter.java的 ListAdapter 类:

从数据库中检索数据的方法位于处理 SQLite 函数的单独类中。这是方法:

这是名为list_item.xml的视图的 xml 文件:

所以我想在活动的文本视图中打印数据,但我不知道在哪里设置文本,在什么类中,如果在 MyListAdapter 类中还是在活动中。

谢谢。

0 投票
1 回答
4027 浏览

android - ListView ArrayAdapter,将子项隐藏在 Row 中?

我觉得有点愚蠢,因为我找不到这个问题的答案,这让我觉得我实际上问错了问题。然而,这里...

我有一个列表视图和一个在 xml 中定义的 listviewitem,有几个字段,没什么特别的。全部设置为可见。

然后我使用自定义 ArrayAdapter 绑定到我的 ListView,并希望在第 5 行隐藏我的一个文本视图。但是,它似乎将我的 TextView 隐藏在项目 0 和项目 5 上。这有点奇怪?我已经简化了代码,以重现问题,希望有人能够帮助我......

我的适配器

我的绑定代码

提前致谢!

0 投票
3 回答
2525 浏览

android - Android - 更新 simpleCursorAdapter

我有一个ListActivity从数据库查询中获取数据的。我还有一个自定义适配器,它扩展了简单的光标适配器。

为了显示自定义内容,我重写了newView和 bindView 方法。

视图的每个元素都有:

  1. TextView包含标题
  2. ImageView包含星数 - 显示的图像根据从数据库中获得的值进行更改
  3. 按钮 - 单击时按钮文本会发生变化(收藏夹/收藏夹),并触发数据库更新事件。

我的问题是这个 - 当我滚动时ListView,我所做的更改似乎消失了..例如,第一个项目被标记为收藏,列表被滚动......当我回到第一个项目时,文本恢复恢复到以前的值,尽管内部数据库已更新。

我读到这notifyDatasetChanged()不适合这种情况,因为应该通知适配器数据库更改。我正在尝试使用该reQuery()方法,但不知道将其放置在哪里。

我应该把它放在按钮reQuery()的方法中吗?onClick如果不是,应该放在哪里?

0 投票
9 回答
140492 浏览

android - Android:如何刷新 ListView 内容?

ListView正在使用 的扩展BaseAdapter,我无法让它正确刷新。当我刷新时,旧数据似乎在新数据之上,直到发生滚动事件。旧行绘制在新行之上,但是当我开始滚动时旧行消失了。

我试过打电话给invalidateViews(),notifyDataSetChanged()notifyDataSetInvalidated()。我的代码看起来像:

0 投票
1 回答
16898 浏览

android - 是否可以将 TableLayout 与 ArrayAdapter 绑定?

是否可以将 TableLayout 与 ArrayAdapter 绑定?