सूची दृश्य setOnScrollListener रखने लौटने के शीर्ष करने के लिए देखें

0

सवाल

मैं सूची दृश्य के साथ setOnScrollListener लोड करने के लिए अधिक से डेटा JSON, मैं Asynctask का उपयोग कर प्राप्त करने के लिए JSON. और JSON है पृष्ठवार प्रति पृष्ठ 10. समस्या है जब स्क्रॉल नीचे पहुंच गया, स्क्रॉल इसकी हमेशा वापस करने के लिए शीर्ष के बाद और अधिक डेटा प्रदर्शित (भरी हुई), की तरह गतिविधि फिर आरंभ होता है.

तो कैसे बनाने के लिए स्क्रॉल रहने की स्थिति में नहीं है और वापस शीर्ष करने के लिए ?

कोड

    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) {
                    if (firstVisibleItem+visibleItemCount == totalItemCount && totalItemCount!=0){
                        nextpage = nextpage + 1;
                        new getJSON().execute();
                    }
                }
            });

private class getJSON extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            footer.setVisibility(View.VISIBLE);
            pDialog = new ProgressDialog(PoActivity.this);
            pDialog.setMessage("Please Wait...");
            pDialog.setCancelable(false);
            pDialog.show();
        }

        @Override
        protected Void doInBackground(Void... voids) {
            Handler handler = new Handler();

            String po = handler.makeServiceCall(url + "?page=" + nextpage);

            if (po != null){
                try {
                    JSONObject obj = new JSONObject(po);
                    JSONArray objArray = obj.getJSONArray("data");
                    for (int i = 0; i < objArray.length(); i++){
                        JSONObject data = objArray.getJSONObject(i);
                        String employee = data.getString("name");
                        String status = data.getString("status");


                        HashMap<String, String> datarow = new HashMap<>();

                        datarow.put("emp", employee);
                        datarow.put("status", status);

                        polist.add(datarow);

                    }
                }catch (final JSONException e){
                    Log.e(TAG, "Json parsing error: " + e.getMessage());
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(), "Json parsing error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
                        }
                    });
                }
            }else {
                Log.e(TAG,"Couldn't get json from server");
                endpage = 0;
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(), "Couldn't get json from server. check logcat", Toast.LENGTH_SHORT).show();
                    }
                });
            }

            pDialog.dismiss();
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            pDialog.dismiss();
            footer.setVisibility(View.GONE);

            listAdapter = new SimpleAdapter(PoActivity.this, polist,
                    R.layout.po_row, new String[]{"emp", "status"},
                    new int[]{R.id.name, R.id.status});

            listView.setAdapter(listAdapter);    
        }
    }
1

सबसे अच्छा जवाब

0

त्रुटि के कारण होता है, तो आप फिर से प्रारंभ करने में अनुकूलक और रीसेट करने के लिए यह सूची दृश्य. आप की जरूरत है को प्रारंभ करने के लिए एडाप्टर केवल एक बार और प्रत्येक समय आप डेटा को जोड़ने, आप की जरूरत करने के लिए इसे जोड़ने के लिए ListData में एडाप्टर. फिर कॉल notifyDataSetChanged()

@Override
protected void onPostExecute(Void aVoid) {
   //should be
   listAdapter.add(dataNew);
   listAdapter.notifyDataSetChanged()
}
2021-11-24 05:00:59

यह काम कर रहा है, लेकिन अब केवल एक ही(डुप्लिकेट) डेटा
PieceofShid

यदि आप पहले से ही डेटा जोड़ने के लिए 'polist.जोड़ें(हैंdatarow)' में 'doInBackground' तो आप की जरूरत नहीं है कॉल करने के लिए listAdapter.जोड़ें(dataNew);
Nhân Khuất Văn

वहाँ अलग नहीं है, यहां तक कि जोड़ा गया notifydatasetchanged()
PieceofShid

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................