自动分页使用Holder
当我滚动慢慢一切工作完全正常和无尽ListView的伟大工程,但快速滚动的ListView

自动分页使用<code>Holder</code><br> 当我滚动慢慢一切工作完全正常和无尽<code>ListView</code>的伟大工程,但快速滚动的ListView

问题描述:

我创建一个ListView失败,当我打开网页,滚动快结束列表ListView失败在Logcat进一步滚动没有任何错误
这是我的适配器类getView方法自动分页使用<code>Holder</code><br> 当我滚动慢慢一切工作完全正常和无尽<code>ListView</code>的伟大工程,但快速滚动的ListView

@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(); 

    } 
} 

我不知道我是缺少在这里请大家帮帮忙!

+0

recyclerView?所以你正在使用'RecyclerView'或'ListView'? – pskink

+0

对不起yes ListView – phpdroid

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

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

+0

我可以在'list.notify()'和'list.notifyAll()'这两个函数中找到错误对象没有被线程锁定的位置 – phpdroid

+0

不在适配器的列表中。 notifyDataSetChanged是如何告诉适配器它所适应的数据已更改。如果你不叫它,适配器会认为它没有。 –

+0

谢谢你的回答 – phpdroid