【问题标题】:Auto pagination fails on fast scroll listView快速滚动 listView 上的自动分页失败
【发布时间】:2018-02-12 11:04:18
【问题描述】:

我正在使用Holder 创建一个ListView
当我慢慢滚动时,一切都运行良好,Endless ListView 运行良好,但是当我打开页面并滚动 快速到列表末尾 ListView无法进一步滚动没有任何错误 在 Logcat。
这是我的适配器类 getView 方法

 @Override
public View getView(final int i, View view, ViewGroup viewGroup) {
    View row=view;
    Holder holder=null;
    if(row==null){
        LayoutInflater inflater= (LayoutInflater)mContext.getSystemService(mContext.LAYOUT_INFLATER_SERVICE);
        row= inflater.inflate(R.layout.half_movie,viewGroup,false);
        holder=new Holder(row);
        row.setTag(holder);
    }else{


        holder= (Holder) row.getTag();



    }
    //here setting all holers
    Picasso.with(mContext).load("https://image.tmdb.org/t/p/w185"+temp.getImageUrl()).into(holder.poster);
    if(reachedEndOfList(i)) loadMoreData();
    return row;
}
private boolean reachedEndOfList(int position) {
    // can check if close or exactly at the end
    return position == list.size() - 4;
}

private void loadMoreData() {
    if(isNetworkAvailable()) {
        new MyAdapter.AsyncTaskParseJson().execute(url);
    }else{

        Toast.makeText(mContext, "Sorry No internet Connection Found!", Toast.LENGTH_SHORT).show();

    }
}
public class AsyncTaskParseJson extends AsyncTask<String,String ,void> {

    JSONArray dataJsonArr = null;
    ProgressDialog progressDialog;
    @Override
    protected void onPreExecute() {

        progressDialog = ProgressDialog.show(mContext,
                "Movie Pal!",
                "Loading Movies List..");
    }

    @Override
    protected void doInBackground(String... arg0) {



        String yourJsonStringUrl = arg0[0];
         yourJsonStringUrl=yourJsonStringUrl+"&page="+pageNmber;
        JSONParser jParser = new JSONParser();
        JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl.replace(" ","%20"));

        System.out.println(json);
        try {
        JSONArray jsonArray = json.getJSONArray("results");
        for (int i=0; i<jsonArray.length(); i++) {
            Movie newMovie = new Movie();

           //setting to class object

            list.add(newMovie);
        }
        pageNmber++;} catch (JSONException e) {
            e.printStackTrace();
        }
        return json;

    }

    @Override
    protected void onPostExecute() {
        progressDialog.dismiss();

    }
}

我不知道我在这里缺少什么,请帮忙!

【问题讨论】:

  • recyclerView?所以您使用的是RecyclerViewListView
  • 抱歉是 ListView

标签: android listview pagination scrollview


【解决方案1】:

您需要在加载新数据时调用 notifyDataSetChanged(或类似的函数,如 notifyDataSetInsert),以便它知道存在更多数据并且应该允许更多滚动。

此外,您可能没有在列表末尾和获取更多数据之间添加足够的填充(仅 4 个项目)。这可能会导致卡住滚动 - 您将到达终点并停止,直到下载更多数据,然后您可以再次滚动。举个例子——我在结束前 10 个项目开始获取新数据,我只是在访问本地数据库,而不是远程服务器。

【讨论】:

  • 我可以在list.notify()list.notifyAll() 找到两个函数,它们都给出错误对象之前没有被线程锁定
  • 不在列表中 - 在适配器上。 notifyDataSetChanged 是您告诉适配器它所适应的数据已更改的方式。如果您不调用它,适配器将假定它没有调用它。
猜你喜欢
  • 1970-01-01
  • 2012-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多