问题标签 [baseadapter]

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 回答
302 浏览

android - 有没有办法在单个对象上调用 BaseAdapter.notifyDataSetChanged() ?

有没有办法在适配器中的单个元素上调用BaseAdapter.notifyDataSetChanged() 。

我要做的是更新数据并在包含的 ListView 中反映这些更改。问题是有时更改是如此之小,以至于我必须刷新整个视图而不是视图中已更新的单个项目似乎很荒谬。

0 投票
1 回答
411 浏览

android - Listview 的效率与 ScrollView 的灵活性

我正在尝试为特定数据捕获应用程序找出特定 UI 的最佳方法,其中我在垂直滚动视图的顶部有一堆表单小部件(EditText 和 Spinner),然后是一些选中的条目(10 -200),然后是最后的一些附加小部件。

我正在尝试考虑利用 ListView 效率的最佳方法(使用视图回收和已检查条目的自定义适配器的选项),但可以灵活地在列表之前和之后包含其他小部件。

出于有据可查的原因,我已经消除了将 ListView 放入 Scrollview 的想法。

我也考虑过将它分成多个视图并使用 ViewFlipper,但这对于用户体验来说并没有那么流畅。

我遇到的唯一其他想法是将我的非列表视图项目作为列表视图页眉和页脚。这样我仍然可以将我的自定义适配器用于列表视图检查的条目,其余的小部件是我想要的。

这听起来像是最有效和最明智的方法吗?任何意见和建议表示赞赏。

0 投票
1 回答
827 浏览

android - 强制 ListView/BaseAdapter 在 android 开始时膨胀所有需要的视图

我有一个相当昂贵的布局,我膨胀到一个列表视图的孩子。如果列表视图显示 5 个孩子的吃饭时间getView()只会增加我昂贵的布局中的 5 个(也许多一两个)。然后重复使用它。这个过程可能需要一些时间,但没关系。(同时我从互联网下载数据,所以不会破坏用户体验)。

问题是,如果我滚动,在滚动开始时,convertView is null列表视图需要再膨胀一次。这仅在我第一次滚动时发生。有没有办法避免这种情况?请注意,我不会调整任何子项或 Listview 的大小。有没有办法在开始时增加额外的视图,这样我就可以避免滚动滞后?

更新还要具体:

我的列表视图显示了 3 行半.. 含义 4.适配器充气 5.适配器什么来充气另一个?也许有一个更优雅的解决方案

0 投票
1 回答
2128 浏览

android - 如何在 Android 中显示 GridLayout 的上下文菜单

所以我做了一个类扩展 BaseAdaper,看起来像这样:

}

在我的活动中,有一个 GridLayout 并将其适配器设置为 ProfileTileAdapter 的一个实例。在我的活动中,当用户长按其中一个视图(在本例中为 ProfileTile)时,我想打开一个上下文菜单,但我不知道如何操作。我还需要找出当用户在上下文菜单中选择一个选项时,ProfileTile 长按了什么所有的教程都在活动中使用静态视图进行操作,但不是这样。

0 投票
1 回答
1699 浏览

android - 如何使用baseadapter从gridview中删除一个项目而不刷新所有项目

背景: 我正在使用 baseadapter 用 imageviews 填充 gridview。Imageview 的资源是使用 AsyncTask 下载的。我从onPostExecute方法中得到一个回调作为successfailure。我在适配器的getView方法中使用了这个回调。

问题 如果 imageview 的 url 返回 404 错误,则由于 404 错误,gridview 有一些空格。我可以删除这些项目并调用 notifydatasetchanged,但这次它从一开始就刷新了所有 gridview。尽管我将错误的项目保留在某个地方,删除它们并一劳永逸地调用 notifydatasetchanged,但似乎 gridview 在应用程序中填充了两次。

问题 我想在 gridview 中加载图像而没有任何间隙。例如,如果有 9 个图像,第四个和第六个图像返回 404 错误,那么我只想在 gridview 中看到七个项目

我希望我的问题很清楚。谢谢你的帮助。

0 投票
1 回答
734 浏览

android - 使用来自自定义适配器的动态元素

你好,这是我在堆栈中的第一个问题。我正在创建本教程的动态网格 http://www.stealthcopter.com/blog/2010/09/android-creating-a-custom-adapter-for-gridview-buttonadapter/comment-page-1/

现在它工作得很好。我的布局由 gridView 组成,在这个 gridView 下我有一个 TextView。

问题是我想更改 TextView 以在焦点更改时(在网格元素上)在每个 id 上显示不同的信息。我尝试在 ButtonAdapter 中使用 OnFocusChangeListener,但是在尝试获取对 textView 的引用时,它说 findViewById 没有实现。

我想知道如何在我的主要活动中进行引用,以允许我处理我的动态网格元素。我在 onCreate(); 中有以下内容

所以我想从这里处理我的网格元素,有什么想法吗?谢谢

编辑:我一直在尝试改变不同的东西,但我从我的 getView 方法收到了 NullPointerException 。我找不到让它工作的方法,我会感谢任何帮助的人,这是我的代码:

谢谢。

0 投票
2 回答
2355 浏览

android - Android:如何将适配器中按钮的引用传递给 Activity

全部,

我有一个列表视图,里面充满了启动和停止计时器计时器的按钮。每个计时器也设置在列表视图的每一行内。在活动内部,我有一个全局开始和停止按钮。这些按钮应该停止和启动列表视图中的所有计时器。我似乎无法引用列表视图中的所有计时器来停止它们。我什至无法引用列表视图每一行内的按钮。

下面是我的代码。请帮忙!

这是适配器:

公共类 TimersAdapter 扩展 BaseAdapter {

这是我的活动:

公共类 PenaltyBoxTimerActivity 扩展 Activity { 私有按钮 _startTimersButton; 私人按钮_stopTimersButton;私有 ListView _manageTimersList;TimersListAdapter _适配器;

0 投票
2 回答
1740 浏览

android - 将整数传递给 BaseAdapter

我正在尝试将整数数组传递给 baseadapter,这样 A.class 会将整数数组传递给 B.class 中的 BaseAdapter。这是我在 A.Class (发件人)中传递整数数组的方式:

在我的活动 B 中的 BaseAdapter 中:

现在显然上面的代码不正确,我不能在 imageadapter 中使用 getintent。但这是我试图完成的一个说明性示例,并且想知道如何通过意图将变量或数组传递给 BaseAdapter,如果可能的话。

0 投票
1 回答
1858 浏览

android - 在应用程序执行期间更改链接到 ListView 的适配器中的项目视图

我试图让我的应用程序的用户可以选择更改他们希望结果显示的方式。

我为每个视图创建了一个不同的布局项,并从BaseAdapter如下扩展:

调用notifyDataSetChanged()(可通过调试观察到)刷新视图,因为新视图正在膨胀并从getView()方法返回。

但是屏幕上的视图没有改变......

有什么我想念的吗?

0 投票
2 回答
4015 浏览

android - Android:ListView的性能还是不够怎么办?

好吧,这个话题过去和现在都在争论很多,我已经阅读了很多教程、提示并看到了关于它的讨论。但是,每当我的行达到一定的复杂性时,我仍然在为 ListView 实现自定义 BaseAdapter 时遇到问题。所以我基本上拥有的是通过解析来自网络的 xml 获得的一些实体。此外,我还获取了一些图像等,所有这些都是在 AsyncTask 中完成的。我在 getView() 方法中使用性能优化 ViewHandler 方法,并按照每个人的建议重用 convertView。即我希望我使用 ListView 应该是这样,当我只显示一个 ImageView 和两个 TextViews 时,它真的很好用,它们的样式是 SpannableStringBuilder (我不使用任何 HTML.fromHTML ) .

现在它来了。每当我使用多个小的 ImageView、一个 Button 和更多的 TextView 扩展我的行布局时,所有这些都使用 SpannableStringBuilder 进行了不同的样式设置,我得到了停止的滚动性能。该行由作为父级的 RelativeLayout 组成,所有其他元素都使用布局参数进行排列,因此我无法让该行的布局更简单。我必须承认,我从未见过任何包含这么多 UI 元素的行的 ListView 实现示例。

但是,当我在 ScrollView 中使用 TableLayout 并用 AsyncTask 手动填充它(由 onProgressUpdate() 稳定添加的新行)时,即使其中有数百行,它的行为也非常流畅。如果滚动到列表的末尾,当添加新行时,它只会有点绊脚石。否则,它比使用 ListView 平滑得多,ListView 在滚动时总是绊倒。

当 ListView 不想表现良好时,有什么建议吗?我应该继续使用 TableLayout 方法还是建议使用 ListView 来优化性能?

这是我的适配器的实现:

这是该行的 xml(没有按钮,仍然磕磕绊绊):

** * ** * ** **更新* ** * ** * ** * ** * _

事实证明,这个问题可以通过使用 ArrayAdapter 而不是 BaseAdapter 来解决。我对 ArrayAdapter 使用了完全相同的代码,性能差异是巨大的!它的运行与使用 TableLayout 一样流畅。

因此,每当我使用 ListView 时,我肯定会避免使用 BaseAdapter,因为它明显较慢且针对复杂布局的优化程度较低。这是一个相当有趣的结论,因为我在示例和教程中没有读过任何关于它的词。或许我没有准确地阅读它。;-)

然而,这是运行顺利的代码(如您所见,我的解决方案是使用分隔符对列表进行分组):

+++++++++++++++++++ 带跟踪的第二次编辑 +++++++++++++++++++++++ 只是为了表明 BaseAdapter 做了一些不同的事情比 ArrayAdapter。这只是来自 getView() 方法的整个跟踪,两个适配器中的代码完全相同。

首先是调用量http://img845.imageshack.us/img845/5463/tracearrayadaptercalls.png

http://img847.imageshack.us/img847/7955/tracebaseadaptercalls.png

独家耗时 http://img823.imageshack.us/img823/6541/tracearrayadapterexclus.png

http://img695.imageshack.us/img695/3613/tracebaseadapterexclusi.png

包含时间消耗 http://img13.imageshack.us/img13/4403/tracearrayadapterinclus.png

http://img831.imageshack.us/img831/1383/tracebaseadapterinclusi.png

如您所见,这两个适配器之间存在巨大差异(ArrayAdapter 在 getView() 方法中速度快四倍)。我真的不知道为什么会如此戏剧化。我只能假设 ArrayAdapter 有某种更好的缓存或进一步的优化。

++++++++++++++++++++++++++只是另一个更新+++++++++++++++++ 向您展示我当前的 UIBlog 类是如何构建的:

为了清楚起见,我将它用于两个适配器。