- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试在我的应用程序中利用我的 API 来更新基于 Google MapView 位置的 RecyclerView,因此这意味着该 API 将返回不同大小的列表,而且频率很高。初始应用程序加载后,当我更改位置时,我会触发一个新的 API 调用,该调用会创建一个新的适配器并调用 RecyclerView.swapAdapter()
方法。这似乎是一个 super 简单的解决方案,但我在 RecyclerView 或 RecyclerView.ViewHolder 文档中找不到任何内容来解决这个问题。
问题是:
这是我的基本代码结构:
在我的 API 类中
public void getFeed(final RecyclerView recView, final Location loc){
service().getFeed(MyFeeds.API_FEED).enqueue(new Callback<NearbyPeopleProto.NearbyPeopleFeed>() {
@Override
public void onResponse(Response<NearbyPeopleProto.NearbyPeopleFeed> response, Retrofit retrofit) {
Log.d(LOG_TAG, "recview Child count: " + recView.getChildCount());
ArrayList<NearbyPeople> near = new RtGtfsParser(c).getStopsByLocation(response.body(), loc);
/*Log.d(LOG_TAG, "onResponse: " + recView.getChildCount() + " -- " + near.get(0).getStops().size());
if(recView.getChildCount() > near.get(0).getStops().size()) {
//recView.removeViews(near.get(0).getStops().size() - 1, recView.getChildCount() - 1);
recView.removeViewAt(1);
Log.d(LOG_TAG, "onResponse: " + recView.getChildCount());
}*/
GroupListAdapter ta = new GroupListAdapter(c, near);
Log.d(LOG_TAG, "onResponse: Swapping");
//recView.setAdapter(ta);
recView.swapAdapter(ta, true);
}
@Override
public void onFailure(Throwable t) {
Log.e(LOG_TAG, t.getMessage());
}
});
}
我的适配器类
public class GroupListAdapter extends
RecyclerView.Adapter<GroupListAdapter.ViewHolder> {
ArrayList<NearbyPeople> NearbyPeople;
public GroupListAdapter(ArrayList<NearbyPeople> NearbyPeople) {
this.NearbyPeople = NearbyPeople;
}
@Override
public GroupListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View stationView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item, parent, false);
return new ViewHolder(stationView);
}
@Override
public void onBindViewHolder(GroupListAdapter.ViewHolder vh, int position) {
if(NearbyPeople.get(0).getStops() != null) {
Log.d(LOG_TAG, "onBindViewHolder: " + NearbyPeople.get(0).getStops().size());
vh.locationTag.setText(NearbyPeople.get(0).getStops().get(position).stopName);
} else {
vh.locationTag.setText("Loading...");
}
}
@Override
public int getItemCount() {
return NearbyPeople.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView locationTag;
public ViewHolder(View itemView) {
super(itemView);
locationTag = (TextView) itemView.findViewById(R.id.location_tag);
}
}
}
LogCat 输出:
01-12 22:36:27.718 6821-6821/net.mastrgamr.myapp D/TripActivity: onCameraChange:
//API gets called on the initial app load
01-12 22:36:28.597 6821-6821/net.mastrgamr.myapp I/System.out: LOADING MAP
01-12 22:36:28.622 6821-6831/net.mastrgamr.myapp W/art: Suspending all threads took: 9.511ms
01-12 22:36:28.633 6821-6831/net.mastrgamr.myapp I/art: Background sticky concurrent mark sweep GC freed 16785(866KB) AllocSpace objects, 9(3MB) LOS objects, 0% free, 68MB/68MB, paused 16.852ms total 67.527ms
01-12 22:36:28.635 6821-6821/net.mastrgamr.myapp D/TripActivity: onMyLocationChange: Location[fused 40.882174,-73.833406 acc=50 et=+2d19h35m3s487ms]
01-12 22:36:28.685 6821-6831/net.mastrgamr.myapp I/art: Background partial concurrent mark sweep GC freed 2960(217KB) AllocSpace objects, 28(26MB) LOS objects, 24% free, 48MB/64MB, paused 5.893ms total 47.174ms
01-12 22:36:28.903 6821-6821/net.mastrgamr.myapp D/ApiService: recview Child count: 1
01-12 22:36:28.906 6821-6821/net.mastrgamr.myapp D/NearbyGroups: mapping to model
01-12 22:36:28.913 6821-6821/net.mastrgamr.myapp I/System.out: MAPPED!!: [net.mastrgamr.tpulse.models.realtime.NearbyGroups$Stops@6ebd215, net.mastrgamr.tpulse.models.realtime.NearbyGroups$Stops@da9092a]
01-12 22:36:28.913 6821-6821/net.mastrgamr.myapp D/NearbyGroups: mapping to model
01-12 22:36:28.926 6821-6821/net.mastrgamr.myapp I/System.out: MAPPED!!: [net.mastrgamr.tpulse.models.realtime.NearbyGroups$Stops@23fe31b, net.mastrgamr.tpulse.models.realtime.NearbyGroups$Stops@e481cb8]
01-12 22:36:28.927 6821-6821/net.mastrgamr.myapp D/ApiService: onResponse: Swapping
01-12 22:36:28.943 6821-6821/net.mastrgamr.myapp D/GroupListAdpter: onBindViewHolder: 2
01-12 22:36:28.952 6821-6821/net.mastrgamr.myapp D/GroupListAdpter: onBindViewHolder: 2
01-12 22:36:29.996 6821-6821/net.mastrgamr.myapp D/TripActivity: onCameraChange:
01-12 22:36:33.397 6821-6821/net.mastrgamr.myapp D/TripActivity: onCameraChange:
//API also gets called when the map is moved.
01-12 22:36:33.399 6821-6821/net.mastrgamr.myapp D/TripActivity: CAMERA MOVED -- Regenerating: Location[Moved Location 40.880845,-73.837932 acc=??? t=?!? et=?!?]
01-12 22:36:33.749 6821-6821/net.mastrgamr.myapp D/ApiService: recview Child count: 2
01-12 22:36:33.749 6821-6821/net.mastrgamr.myapp D/NearbyGroups: mapping to model
01-12 22:36:33.755 6821-6821/net.mastrgamr.myapp I/System.out: MAPPED!!: [net.mastrgamr.tpulse.models.realtime.NearbyGroups$Stops@90eab4a]
01-12 22:36:33.755 6821-6821/net.mastrgamr.myapp D/NearbyGroups: mapping to model
01-12 22:36:33.762 6821-6821/net.mastrgamr.myapp I/System.out: MAPPED!!: [net.mastrgamr.tpulse.models.realtime.NearbyGroups$Stops@8abaabb]
01-12 22:36:33.763 6821-6821/net.mastrgamr.myapp D/ApiService: onResponse: Swapping
01-12 22:36:33.770 6821-6821/net.mastrgamr.myapp D/GroupListAdpter: onBindViewHolder: 1
01-12 22:36:33.772 6821-6821/net.mastrgamr.myapp D/GroupListAdpter: onBindViewHolder: 1
01-12 22:36:33.778 6821-6821/net.mastrgamr.myapp D/AndroidRuntime: Shutting down VM
01-12 22:36:33.995 6821-6821/net.mastrgamr.myapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: net.mastrgamr.myapp, PID: 6821
java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at net.mastrgamr.tpulse.adapters.GroupListAdpter.onBindViewHolder(GroupListAdpter.java:63)
at net.mastrgamr.tpulse.adapters.GroupListAdpter.onBindViewHolder(GroupListAdpter.java:25)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5217)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5250)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4487)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4363)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961)
最佳答案
Swap
在两个 list
之间只有当它们的大小相同时才有效,如果 list
中的一个比您的另一个短或大swap
不会按预期工作,您得到的是假设的结果。
示例:String one = {"1","2"}
与 String two = {"4","8","10"}
交换。你知道会发生什么最后一个元素将在 two
数组中被丢弃,因为 one
数组没有第三个元素。
虽然swapAdapter(); , 不显示文档,这是您可以假设的。
处理它的最好和最快的方法是制作一个新的适配器
并将其分配给RecyclerView
。
关于android - RecyclerView 不交换适配器,onBindViewHolder IndexOutOfBounds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34758251/
对于我的 CS 类,我必须编写一个从 LinkedList 扩展的 Stacks 接口(interface)。但是,我的 peek() 方法显然有一个错误。当我将其实现到我的其他程序之一时,我返回一个
每次我尝试运行此方法 private void resetOdds() { mOdds[1] = 0.10; mOdds[2] = 0.25; mOdds[3] = 0.35;
我正在学习Java语言,我正在尝试制作MasterMind游戏。我在尝试编译时收到以下错误,在尝试调试代码后,我找不到错误: Exception in thread "main" java.lang.
下面的代码旨在获取一个 byte[] 和其他一些东西(参见它提供的代码)。然后它构建一个具有一定长度的数据包并返回它。我的问题是,当我将文件读入主程序时,我需要数据报包的缓冲区为剩余要发送的字节数(如
我正在做一项作业,需要计算位置 (x,y) 周围像素的 NxN 平均值。 当我传入一个大小变量时,我试图创建一个通用函数来执行此操作。 我只允许大小或 NxN 矩阵为 3x3、5x5 或 7x7。 我
这个问题在这里已经有了答案: Captured variable in a loop in C# (10 个答案) 关闭 3 年前。 我有两个代码循环片段,后者按预期工作,而前者抛出异常。为什么 f
我正在尝试统计一个计数数组,以跟上一组 50 个选择,其中每个选择有三个选项。根据我的导师的说法,计数数组应该有 150 个元素 (3 x 50 = 150)。但我在第 55 行不断收到 IndexO
我正在尝试构建一棵区间树。在这一部分中,我必须按升序排列所有左端点,并按升序排列所有右端点,并将它们放入单点列表中(无重复)。但是,当我尝试将正确的端点合并到点列表中时,我不断收到 indexOutO
我有一个看起来像这样的文本文件: Aaaaa 0.55 2 bbb 2.1 0.25 ccccc 71 21 ..... ..
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 7 年前。 此问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-topic在这里
这个问题已经有答案了: What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it? (25 个回答)
我正在尝试计算金字塔的最小自下而上路径总和。我正在从文本文件读取输入。 我的文本文件示例: 5 6 6 5 3 5 8 3 9 2 1 4 7 9 2 7 第一行告知程序有关金字塔的大小,其他行正在组
我收到以下错误。 Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 at ja
有人能告诉我为什么我总是收到 IndexOutOfBoundsException 吗? Cheeses 只是一个包含一组字符串的数组。Alphabets 是一个包含单个字符串变量的类。 我正在尝试编写
我正在编写一个程序,该程序读取文件,然后检查是否有相同数量的右括号和左括号。因此,我所做的是使用 FileInputStream 和 Scanner 类来读取文件并将每个字符存储在 ArrayList
我正在尝试手动引发数组的索引越界异常。我知道要抛出常规异常,我可以执行以下操作: if(x>array.length){ throw new Exception("Bad choice!"); } 但
您好,我正在为编程类(class)编写一个程序,我得到: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 18
你好,我正在尝试编写 QuickSort 代码,但我总是遇到索引越界?我的代码如下: public class QuickSort { public void quickSort(ArrayL
到目前为止,这让我很困惑。 尝试运行此特定查询时,我不断收到 CursorIndexOutOfBounds。 Cursor c = db.rawQuery("SELECT * FROM tab
所以,我正在做一项作业,让一个类(class)接收为 Conway 的 Game Of Life 设置的文本文件。我已经写了所有东西,但是很难测试,因为我的错误处理很糟糕。我已经阅读了关于 try、c
我是一名优秀的程序员,十分优秀!