在scrollldown之后控制从服务器加载listview中的项目

时间:2016-07-05 14:15:02

标签: java android listview

我想在从服务器加载后停止listview,而不是在我非常快速滚动时向上移动。

我也累了setFriction财产,但它似乎没那么有效。

有人可以建议如何控制吗?

这是我的代码。

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Calendar;

public class MainActivity extends AppCompatActivity {
    private DataListAdapter dataListAdapter;
    Activity _activity;
    ArrayList<DataObject> dataArrayList;
    private ListView lv;
    private String jsonResult;
    boolean loadingMore = false;
    private DataObject dataObject;
    View footerView;
    ProgressDialog progress;


    private static final String TAG = MainActivity.class.getSimpleName();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        _activity = this;
        lv = (ListView) findViewById(R.id.listView1);
        dataArrayList = new ArrayList<DataObject>();
        footerView = ((LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.loading_view, null, false);

        if (isOnline(_activity)) {
            progress = new ProgressDialog(this);
            lv.setFriction(ViewConfiguration.getScrollFriction() * 0.5f);
            lv.setOnScrollListener(new AbsListView.OnScrollListener() {

                @Override
                public void onScrollStateChanged(AbsListView view, int scrollState) {
                }

                @Override
                public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {


                    int lastInScreen = firstVisibleItem + visibleItemCount;


                    if ((lastInScreen == totalItemCount) && !(loadingMore)) {
                        new LoadJsonData().execute();
                    }
                }
            });

        }

        dataListAdapter = new DataListAdapter(dataArrayList);
        lv.setAdapter(dataListAdapter);

    }


    private void scrollNotifyChange() {
        lv.setOnScrollListener(new AbsListView.OnScrollListener() {

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {


                int lastInScreen = firstVisibleItem + visibleItemCount;


                if ((lastInScreen == totalItemCount) && !(loadingMore)) {

                    new LoadJsonData().execute();
                }
            }
        });
    }

    public static boolean isOnline(Context context) {
        ConnectivityManager cm =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        return netInfo != null && netInfo.isConnectedOrConnecting();
    }

    private class LoadJsonData extends AsyncTask<Void, Void, String> {
        //        ProgressDialog progress;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            if (dataArrayList.size() == 0) {
                progress = ProgressDialog.show(_activity, "Progress",
                        "Please wait", true);
            }

        }

        @Override
        protected String doInBackground(Void... params) {
            String jsonResult = "";
            loadingMore = true;
            InputStream inputStream = null;
            String result = "";
            try {
                HttpClient httpclient = new DefaultHttpClient();
                HttpGet request = new HttpGet("https://datatables.net/examples/server_side/scripts/server_processing.php");

                HttpResponse httpResponse = httpclient.execute(request);
                inputStream = httpResponse.getEntity().getContent();
                if (inputStream != null) {
                    jsonResult = convertInputStreamToString(inputStream);
                } else {
                    jsonResult = "Did not work!";
                }
            } catch (Exception e) {
                Log.e(TAG, "GET failed", e);
            }

            return jsonResult;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            progress.dismiss();
            try {
                JSONObject dataJsontObject = new JSONObject(result);
                JSONArray dataJsonArray = dataJsontObject.getJSONArray("data");
                for (int i = 0; i < dataJsonArray.length(); i++) {
                    JSONArray dataSubArray = dataJsonArray.getJSONArray(i);

                    DataObject dataObject = new DataObject();
                    dataObject.setName((String) dataSubArray.get(0));
                    dataObject.setType((String) dataSubArray.get(1));
                    dataObject.setProfession((String) dataSubArray.get(2));
                    dataObject.setCountry((String) dataSubArray.get(3));
                    dataObject.setCurrency((String) dataSubArray.get(5));
                    dataArrayList.add(dataObject);
//                    dataListAdapter.add(dataObject);

                }
                lv.addFooterView(footerView);
                dataListAdapter.notifyDataSetChanged();

                loadingMore = false;
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    }

    public class DataListAdapter extends BaseAdapter {
        ArrayList<DataObject> dataListObject = new ArrayList<DataObject>();

        public DataListAdapter(ArrayList<DataObject> dataListObject) {
            this.dataListObject = dataListObject;
        }

        @Override
        public int getCount() {
            return dataListObject.size();
        }

        @Override
        public Object getItem(int position) {
            return dataListObject.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }



        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
            if (convertView == null) {
                LayoutInflater inflater = LayoutInflater.from(_activity);
                convertView = inflater.inflate(R.layout.single_row, null);
                holder = new ViewHolder();
                holder.name = (TextView) convertView.findViewById(R.id.name);
                holder.type = (TextView) convertView.findViewById(R.id.type);
                holder.profession = (TextView) convertView.findViewById(R.id.profession);
                holder.country = (TextView) convertView.findViewById(R.id.country);
                holder.currency = (TextView) convertView.findViewById(R.id.currecy);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            final DataObject current = dataListObject.get(position);
            holder.name.setText("Name--" + current.getName());
            holder.type.setText("Type--" + current.getType());
            holder.profession.setText("Professoion--" + current.getProfession());
            holder.country.setText("Country--" + current.getCountry());
            holder.currency.setText("Currency--" + current.getCurrency());
            return convertView;

        }

    }

    static class ViewHolder {

        TextView name;
        TextView type;
        TextView profession;
        TextView country;
        TextView currency;


    }

    public static String convertInputStreamToString(InputStream inputStream) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String line = "";
        String result = "";
        while ((line = bufferedReader.readLine()) != null) {
            result += line;
        }
        inputStream.close();
        return result;
    }

}

0 个答案:

没有答案