java - 如何使 recyclerview 使用特定索引中的数组列表

标签 java android arrays arraylist android-recyclerview

我在 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/

相关文章:

java - 检查Optional中是否存在null属性并返回String Java Stream API

java - 我应该升级到 CGLIB 3.0 吗?

android - 谷歌地图自定义样式 - 饱和度、亮度不起作用

php - PHP 中使用关键字过滤数组?

java - 如果 Spring 中没有 bean,是否有一种简单的方法来 Autowiring 空集合?

java - 如何通过java中的套接字发送图像?

Android 数据绑定(bind)点击监听器不工作(随机工作)

android - 如何在 Canvas 上绘制 API 级别低于 21 的圆角矩形

c++ - 是否可以创建 3d 数组的指针数组?

java - 需要帮助查找数组的值