Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pull to refresh and loadmore listview like facebook [closed]

here i am using sliding drawer. in that on click home icon it shows 3 tabs
1) which concept should i apply for tab ?
2) I want to apply pulltoreferesh and loadmore in listview like facebook ? in that you have also seen that when scrolling up progressbar gets hide and request get cancel.

enter image description here

like image 610
Bhavesh Jethani Avatar asked Mar 12 '13 13:03

Bhavesh Jethani


3 Answers

public class ListDemo extends Fragment{
    ArrayAdapter<String> files;
    private LinkedList<String> mListItems;
    PullAndLoadListView lyt ;
    //  ListView lv1;

    // The data to be displayed in the ListView
    private String[] mNames = { "Fabian", "Carlos", "Alex", "Andrea", "Karla",
            "Freddy", "Lazaro", "Hector", "Carolina", "Edwin", "Jhon",
            "Edelmira", "Andres" };

    // The data to be displayed in the ListView
    private String[] mAnimals = { "Perro", "Gato", "Oveja", "Elefante", "Pez",
            "Nicuro", "Bocachico", "Chucha", "Curie", "Raton", "Aguila",
            "Leon", "Jirafa" };



    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        final View v = inflater.inflate(R.layout.tab_frag3_layout, container, false);
        mListItems = new LinkedList<String>();
        mListItems.addAll(Arrays.asList(mNames));
        lyt = (PullAndLoadListView)v.findViewById(R.id.tab_frag3_listview1);

        if (container == null) {
            return null;
        }

        files = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,mListItems);
        lyt.setAdapter(files);
        lyt.setOnRefreshListener(new OnRefreshListener() {

            @Override
            public void onRefresh() {
                // TODO Auto-generated method stub
                new PullToRefreshDataTask().execute();
            }
        });
        lyt.setOnLoadMoreListener(new OnLoadMoreListener() {

            @Override
            public void onLoadMore() {
                // TODO Auto-generated method stub
                new LoadMoreDataTask().execute();
            }
        });
        return v;

    }
    private class LoadMoreDataTask extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {

            if (isCancelled()) {
                return null;
            }

            // Simulates a background task
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            }

            for (int i = 0; i < mAnimals.length; i++)
                mListItems.add(mAnimals[i]);

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            mListItems.add("Added after load more");

            // We need notify the adapter that the data have been changed
            files.notifyDataSetChanged();

            // Call onLoadMoreComplete when the LoadMore task, has finished
            lyt.onLoadMoreComplete();

            super.onPostExecute(result);
        }

        @Override
        protected void onCancelled() {
            // Notify the loading more operation has finished
            lyt.onLoadMoreComplete();
        }
    }

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

        @Override
        protected Void doInBackground(Void... params) {

            if (isCancelled()) {
                return null;
            }

            // Simulates a background task
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            }

            for (int i = 0; i < mAnimals.length; i++)
                mListItems.addFirst(mAnimals[i]);

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            mListItems.addFirst("Added after pull to refresh");

            // We need notify the adapter that the data have been changed
            files.notifyDataSetChanged();

            // Call onLoadMoreComplete when the LoadMore task, has finished
            lyt.onRefreshComplete();

            super.onPostExecute(result);
        }

        @Override
        protected void onCancelled() {
            // Notify the loading more operation has finished
            lyt.onLoadMoreComplete();
        }
    }

}

here is source code of pull-to-refresh and load-more library.

like image 167
Bhavesh Jethani Avatar answered Nov 07 '22 09:11

Bhavesh Jethani


Use this library, I have used days ago and work perfect:

RefreshableListView

like image 32
Nicolas Jafelle Avatar answered Nov 07 '22 08:11

Nicolas Jafelle


I haven't used this library myself and it has been discontinued (2 months ago), but it looks great with examples and all:

https://github.com/chrisbanes/Android-PullToRefresh/wiki/Quick-Start-Guide

From what I read, basically you need to replace your own listview with the library's listview and import the jar file and you're good to go ;-)

like image 1
Darwind Avatar answered Nov 07 '22 10:11

Darwind