我在 fragment 内有 recyclerview 和通过网络请求发送的数据。! 我想要的是忽略数据数组的前 3 项,我只想它从索引 3 开始。!
我认为可以使用 homeData.sublist(0,2)
来解决这个问题,但我不知道该行到底放在哪里..!我已经尝试了几个地方,但没有成功..!?
我的 fragment
public class HomeFragment extends BaseFragment {
private RecyclerView recyclerView;
ArrayList<Home.HomeItem> homeData;
private HomeAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
InitRecyclerView();
GetData();
return rootView;
}
private void GetData() {
WebRequests.HomeRequest(new OnRequestResults() {
@Override
public void OnSuccess(Object o) {
ArrayList<Home.HomeItem> homeList = (ArrayList<Home.HomeItem>) o;
homeList.subList(0, 2); // tried here, but it didn't work
homeData.clear();
homeData.addAll(homeList);
adapter.notifyDataSetChanged();
}
}
private void InitRecyclerView() {
homeData = new ArrayList<>();
recyclerView.setHasFixedSize(true);
LayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(mLayoutManager);
homeList.subList(0, 2); // tried here, it gives carsh `IndexOutofBound..`
adapter = new HomeAdapter(homeData, getActivity());
recyclerView.clearOnScrollListeners();
recyclerView.setAdapter(adapter);
}
}
我的适配器
//code
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
data.subList(0, 2); //noting changes here too
holder.title.setText(data.get(position).getTitle());
Picasso.with(context)
.load(data.get(position)
.getImgUrl).placeholder(R.drawable.logo)
.into(holder.pic);
}
//code
更新-------------------------------------------------------- ------------------------
我使用了 .subList 错误,我必须在参数内的新列表上指定开始和结束,我添加了我想要删除的限制,这完全是愚蠢的!
我还在 onSuccess 中添加了这一行!
@Override
public void OnSuccess(Object o) {
ArrayList<Home.HomeItem> home = (ArrayList<Home.HomeItem>) o;
homeData.clear();
homeData.addAll(home.subList(3,home.size())); //here
adapter.notifyDataSetChanged();
}
最佳答案
1-如果您想跳过前3个元素,那么您的范围是错误的。 (0,2) 会得到前 3 个元素,它应该是 (2, list.size()-1)
2-调用此行homeList.subList(...)
不会更改列表本身,它将返回您需要使用的列表。
所以代码可能如下所示。
homeData.clear();
if(homeList.size() >= 2){ // make sure array has at least 3 elements, (which is going to be skipped)
homeData.addAll(homeList.subList(2, homeList.size()));
}
注意:我不确定 fromIndex
(2) 如果您仍然在列表中看到第 3 项,则在 IF 语句和 subList() 中使用 3
关于java - 如何使 recyclerview 使用特定索引中的数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45531545/