簡體   English   中英

當位於底部時,Android自動在列表視圖中加載更多項目

[英]Android automatically load more items in listview when at the bottom

我正在嘗試在我的應用程序中實現此功能,我知道之前曾有人問過這個問題,但我不明白。 現在,我像這樣通過JSON請求檢索所有項目。

myTicketsFragment.java

private class PrefetchData extends AsyncTask<Void, Void, Void> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        dialog = new ProgressDialog(getActivity());
        dialog.setMessage("Downloading..");
        dialog.setIndeterminate(true);
        dialog.setCancelable(false);
        dialog.show();
    }

    @Override
    protected Void doInBackground(Void... arg0) {
        HttpReader httpReader = new HttpReader();
        httpReader
                .setOnResultReadyListener(new HttpReader.OnResultReadyListener() {
                    @Override
                    public void resultReady(String result) {
                        JsonHelper jsonHelper = new JsonHelper();
                        tickets = jsonHelper.getTickets(result);

                        TicketAdapter ticketAdapter = new TicketAdapter(
                                getActivity(), tickets);
                        final ListView listViewTickets = (ListView) rootView
                                .findViewById(R.id.listViewTickets);
                        listViewTickets.setAdapter(ticketAdapter);

                        listViewTickets
                                .setOnItemClickListener(new AdapterView.OnItemClickListener() {
                                    @Override
                                    public void onItemClick(
                                            AdapterView<?> parentView,
                                            View childView, int position,
                                            long id) {

                                        if (isNetworkAvailable()) {
                                            Bundle bundle = new Bundle();
                                            bundle.putInt("ticketId",
                                                    tickets.get(position)
                                                            .getId());
                                            Intent ticketDetail = new Intent(
                                                    getActivity(),
                                                    TicketActivity.class);
                                            ticketDetail.putExtras(bundle);
                                            startActivity(ticketDetail);
                                        } else {
                                            showNoInternetDialog();
                                        }
                                    }
                                });
                        listViewTickets.setEmptyView(rootView
                                .findViewById(R.id.empty));
                        dialog.dismiss();
                    }
                });
        httpReader
                .execute("http://aa.aaaa.aa:8882/desk/API/v1/json.php?auth=platformt&a=getTickets&uauth="
                        + authCode + "&uid=" + uId + "&mode=mytickets");
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
    }
}

我想我需要知道顯示的最后一個項目並檢索新的項目。.我只是沒有真正了解這項技術,所以找不到很好的例子。

如果有人可以引導我朝正確的方向前進,那就太好了!

我建議您將ListView移出AsyncTask 如果您願意,可以通過這種方式實現延遲加載(這是一個基本思想):

public class MyActivity extends Activity {
    private MyAdapter myAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ListView listView = findViewById(R.id.listView);
        listView.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {

            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                boolean loadMore = 
                        firstVisibleItem + visibleItemCount >= totalItemCount;
                if (loadMore) {
                    AsyncTask<Integer, Void, JSONObject> asyncTask = new AsyncTask<Integer, Void, JSONObject>() {
                        @Override
                        protected void onPreExecute() {
                            //do stuff, show loading image
                        }

                        @Override
                        protected void onPostExecute(JSONObject jsonObject) {
                            myAdapter.data = jsonObject;
                            myAdapter.notifyDataSetChanged();
                        }

                        @Override
                        protected JSONObject doInBackground(Integer... params) {
                            int startValue = params[0];
                            //make a request with pointing offset = startValue
                            return new JSONObject();
                        }
                    };
                    int startValue = totalItemCount;
                    asyncTask.execute(startValue);
                }
            }
        });
    }
}

因此,當您看到ListView的最后一項時,只需下載其他數據並將其推入適配器即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM