滚动到结束时,我希望RecyclerView加载更多项目。我怎么能得到这个?

时间:2017-07-29 15:40:07

标签: java php android mysql mysqli

在我确定数据库的顶行位于列表顶部之前,一切都很好。

目前,我唯一的问题是我希望RecyclerView在滚动到结束时加载更多项目。

PHP

如何编写本节中的代码?

$sql= "SELECT * FROM movies_table ORDER BY id DESC";

这是合并代码

<?php 
    //Creating a connection
    $con = mysqli_connect("--","---","----","-----");

        /* change character set to utf8 */
    $con->set_charset("utf8");

    if (mysqli_connect_errno())
    {
       echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
    /*Get the id of the last visible item in the RecyclerView from the request and store it in a variable. For            the first request id will be zero.*/  
    $id = $_GET["id"];

    $$sql= "SELECT * FROM movies_table ORDER BY id DESC";

    $result = mysqli_query($con ,$sql);

    while ($row = mysqli_fetch_assoc($result)) {

        $array[] = $row;

    }
    header('Content-Type: text/html; charset=utf-8');

    echo json_encode($array, JSON_UNESCAPED_UNICODE );

    mysqli_free_result($result);

    mysqli_close($con);

 ?>

。 RecyclerView

。 如何在本节中编写代码?

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



            }
        });
        return view;
    }

和本节

for (int i = 0; i < array.length(); i++) {

JSONObject object = array.getJSONObject(i);

这是合并代码

public class ThreeFragment extends Fragment{

    private static final String TAG = ThreeFragment.class.getSimpleName();
    private List<Movie> movies;
    private RecyclerView recyclerView;
    private GridLayoutManager gridLayout;
    private MoviesAdapter adapter;

    public ThreeFragment() {
        // Required empty public constructor
    }

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_three, container, false);


        recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview);
        movies = new ArrayList<>();
        getMoviesFromDB(0);

        gridLayout = new GridLayoutManager(getActivity(), 2);
        recyclerView.setLayoutManager(gridLayout);

        adapter = new MoviesAdapter(getActivity(), movies);
        recyclerView.setAdapter(adapter);

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



            }
        });
        return view;
    }



    public void fetchTimelineAsync(int page) {
                // ...the data has come back, add new items to your adapter...

        movies.clear();


        movies = new ArrayList<>();

        getMoviesFromDB(0);

        gridLayout = new GridLayoutManager(getActivity(), 2);

        recyclerView.setLayoutManager(gridLayout);

        adapter = new MoviesAdapter(getActivity(), movies);

        recyclerView.setAdapter(adapter);

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

                        if (gridLayout.findLastCompletelyVisibleItemPosition() == movies.size() - 1) {
                            getMoviesFromDB(movies.get(movies.size() - 1).getId());
                        }

                    }
                });

        adapter.notifyDataSetChanged();

        swipeContainer.setRefreshing(false);
    }





}private void getMoviesFromDB(int id) {

    AsyncTask<Integer, Void, Void> asyncTask = new AsyncTask<Integer, Void, Void>() {



        ProgressDialog pdLoading = new ProgressDialog(getActivity());

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            //this method will be running on UI thread
            pdLoading.setMessage("\tدر حال بارگذاری...");
            pdLoading.setCancelable(false);
            pdLoading.show();

        }


        @Override
        protected Void doInBackground(Integer... movieIds) {

            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url("http://astaneapp.ir/wp-php/movies.php?id=" + movieIds[0])
                    .build();
            try {
                Response response = client.newCall(request).execute();

                JSONArray array = new JSONArray(response.body().string());

                for (int i = 0; i < array.length(); i++) {

                    JSONObject object = array.getJSONObject(i);

                    Movie movie = new Movie(object.getInt("id"), object.getString("movie_name"),
                            object.getString("movie_image"), object.getString("movie_genre") , object.getString("movie_discription") , object.getString("movie_lat"), object.getString("movie_lon") , object.getString("movie_marker"));

                    ThreeFragment.this.movies.add(movie);
                }


            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            adapter.notifyDataSetChanged();
            pdLoading.dismiss();
        }
    };

    asyncTask.execute(id);
}

1 个答案:

答案 0 :(得分:1)

我一直在我的项目中使用这段代码:

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

        final int totalItemCount = mLinearLayoutManager.getItemCount();
        final int visibleItemCount = mLinearLayoutManager.getChildCount();
        final int firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition();

        if (!mLoadingStarted && (totalItemCount - visibleItemCount <= firstVisibleItem)) {
            mLoadingStarted = true;

            // fetch more data
        }
    }
});