1

У меня есть вид ресайклера, который использует AsyncTask для заполнения пользовательского интерфейса.Реализация бесконечной прокрутки в ресайклере View

В настоящее время он извлекает все данные из БД и отображает его в одном кадре, но

Я хочу, чтобы получить только 15 записей на одном дыхании и после свитка концы Я хочу, чтобы загрузить более 15 записей и так далее ... может кто-нибудь помочь. Я вставил код ниже:

FeedActivity.java

package com.bbau.ankit.test_splash; 

import android.app.Activity; 
import android.graphics.Color; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.util.Log; 
import android.view.Window; 

import com.yqritc.recyclerviewflexibledivider.HorizontalDividerItemDecoration; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection;import java.net.URL; 
import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by Ankit on 8/14/2015. 
*/ 
public class FeedListActivity extends Activity { 
    private static final String TAG = "RecyclerViewExample"; 

    private List<FeedItem> feedItemList = new ArrayList<FeedItem>(); 

    private RecyclerView mRecyclerView; 

    private MyRecyclerAdapter adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     /* Allow activity to show indeterminate progressbar */ 
     requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 

     setContentView(R.layout.news); 

     /* Initialize recyclerview */ 
     mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
     mRecyclerView.addItemDecoration(new HorizontalDividerItemDecoration.Builder(this).color(Color.BLACK).build()); 
     mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 

     /*Downloading data from below url*/ 
     final String url = "http://192.168.170.72/bbau_news.php?before=1&after=5"; 
     new AsyncHttpTask().execute(url); 

    } 

    public class AsyncHttpTask extends AsyncTask<String, Void, Integer> { 

     @Override 
     protected void onPreExecute() { 
      setProgressBarIndeterminateVisibility(true); 
     } 

     @Override 
     protected Integer doInBackground(String... params) { 
      InputStream inputStream = null; 
      Integer result = 0; 
      HttpURLConnection urlConnection = null; 

      try { 
       /* forming th java.net.URL object */ 
       URL url = new URL(params[0]); 

       urlConnection = (HttpURLConnection) url.openConnection(); 

       /* for Get request */ 
       urlConnection.setRequestMethod("GET"); 

       int statusCode = urlConnection.getResponseCode(); 

       /* 200 represents HTTP OK */ 
       if (statusCode == 200) { 

        BufferedReader r = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 
        StringBuilder response = new StringBuilder(); 
        String line; 
        while ((line = r.readLine()) != null) { 
         response.append(line); 
        } 

        parseResult(response.toString()); 
        result = 1; // Successful 
       }else{ 
        result = 0; //"Failed to fetch data!"; 
       } 

      } catch (Exception e) { 
       Log.d(TAG, e.getLocalizedMessage()); 
      } 

      return result; //"Failed to fetch data!"; 
     } 

     @Override 
     protected void onPostExecute(Integer result) { 

      setProgressBarIndeterminateVisibility(false); 

      /* Download complete. Lets update UI */ 
      if (result == 1) { 
       adapter = new MyRecyclerAdapter(FeedListActivity.this, feedItemList); 
       mRecyclerView.setAdapter(adapter); 
      } else { 
       Log.e(TAG, "Failed to fetch data!"); 
      } 
     } 
    } 

    private void parseResult(String result) { 
     try { 
      JSONObject response = new JSONObject(result); 
      JSONArray posts = response.optJSONArray("NEWS"); 

      /*Initialize array if null*/ 
      if (null == feedItemList) { 
       feedItemList = new ArrayList<FeedItem>(); 
      } 

      for (int i = 0; i < posts.length(); i++) { 
       JSONObject post = posts.optJSONObject(i); 

       FeedItem item = new FeedItem(); 
       item.setTitle(post.optString("news_desc")); 
       item.setDescription(post.optString("Date")); 
       item.setUrl(post.optString("News")); 
       feedItemList.add(item); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

MyRecyclerAdapter.java

package com.bbau.ankit.test_splash; 

import android.content.Context; 
import android.content.Intent; 
import android.support.v7.widget.RecyclerView; 
import android.text.Html; 
import android.text.style.AlignmentSpan; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 
import android.widget.Toast; 

import org.w3c.dom.Text; 

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.List; 

/** 
* Created by Ankit on 8/14/2015. 
*/ 
public class MyRecyclerAdapter extends RecyclerView.Adapter<FeedListRowHolder> { 



    private List<FeedItem> feedItemList; 

    private Context mContext; 

    public MyRecyclerAdapter(Context context, List<FeedItem> feedItemList) { 
     this.feedItemList = feedItemList; 
     this.mContext = context; 
    } 

    @Override 
    public FeedListRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_row, null); 
     FeedListRowHolder mh = new FeedListRowHolder(v); 
     mh.relativeLayout.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Log.d("List Size", Integer.toString(getItemCount())); 
       TextView redditUrl = (TextView) v.findViewById(R.id.url); 
       String postUrl = redditUrl.getText().toString(); 
       Log.d("The URL:", postUrl); 
       Intent intent = new Intent(mContext, WebViewActivity.class); 
       intent.putExtra("url", postUrl); 
       mContext.startActivity(intent); 
      } 
     }); 

     return mh; 
    } 

    @Override 
    public void onBindViewHolder(FeedListRowHolder feedListRowHolder, int i) { 
     final FeedItem feedItem = feedItemList.get(i); 

     feedListRowHolder.title.setText(Html.fromHtml(feedItem.getTitle())); 
     feedListRowHolder.description.setText(feedItem.getDescription()); 
     feedListRowHolder.url.setText(feedItem.getUrl()); 
    } 

    @Override 
    public int getItemCount() { 
     return (null != feedItemList ? feedItemList.size() : 0); 
    } 

} 
+0

Проверьте это: https://gist.github.com/ssinss/e06f12ef66c51252563e – SANAT

ответ

1

Конечно, вы можете использовать Recycler вид и EndlessScrool как сочетание как this ..

Образец

private boolean loading = true; 
int pastVisiblesItems, visibleItemCount, totalItemCount; 

mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { 
    @Override 
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 

      visibleItemCount = mLayoutManager.getChildCount(); 
      totalItemCount = mLayoutManager.getItemCount(); 
      pastVisiblesItems = mLayoutManager.findFirstVisibleItemPosition(); 

      if (loading) { 
       if ((visibleItemCount + pastVisiblesItems) >= totalItemCount) { 
        loading = false; 
        Log.v("...", "Last Item Wow !"); 
       } 
      } 
    } 
}); 

Не забудьте добавить

LinearLayoutManager mLayoutManager; 
mLayoutManager = new LinearLayoutManager(this); 
mRecyclerView.setLayoutManager(mLayoutManager); 

Вот пример Github: EndlessRecyclerOnScrollListener

Смежные вопросы