ActionBar-PullToRefresh with ListView and Snippet

I am trying to implement ActionBar-PullToRefresh in my application. Activity has a fragment in it, and the fragment has a list in it. Implementing a listview with a custom adapter.

I tried to implement it using the QuickStart-ABS manual on github, but attraction does not work. I have the feeling that I am not initializing PullToRefresh correctly. Please see my code below ...

fragment_news_list.xml

<?xml version="1.0" encoding="utf-8"?>
<uk.co.senab.actionbarpulltorefresh.extras.actionbarsherlock.PullToRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ptr_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/listview_news_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</uk.co.senab.actionbarpulltorefresh.extras.actionbarsherlock.PullToRefreshLayout>

NewsListFragment.java

import java.util.ArrayList;
import java.util.List;

import uk.co.senab.actionbarpulltorefresh.extras.actionbarsherlock.PullToRefreshLayout;
import uk.co.senab.actionbarpulltorefresh.library.ActionBarPullToRefresh;
import uk.co.senab.actionbarpulltorefresh.library.listeners.OnRefreshListener;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.util.LruCache;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.actionbarsherlock.app.SherlockFragment;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.NetworkImageView;
import com.android.volley.toolbox.Volley;

public class NewsListFragment extends SherlockFragment implements
        OnRefreshListener {

    ProgressDialog pd;
    ImageLoader imageLoader;
    JsonArrayRequest jsArrayRequest;
    Database db;
    ListView listview;
    List<NewsItem> newsItems = new ArrayList<NewsItem>();
    NewsAdapter adapter;

    NewsDbAdapter mNewsDbAdapter;

    private PullToRefreshLayout mPullToRefreshLayout;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        mNewsDbAdapter = DatabaseHelper.get(
                getActivity().getApplicationContext()).getNewsDbAdapter();

        // unrelated code removed

        View view = inflater.inflate(R.layout.fragment_news_list, container,
                false);

        pd = new ProgressDialog(getActivity());
        pd.setMessage("Loading...");
        pd.show();
        pd.setCancelable(true);

        newsItems = mNewsDbAdapter.getNewsTitles();
        adapter = new NewsAdapter(getActivity(), newsItems);
        listview = (ListView) view.findViewById(R.id.listview_news_list);
        listview.setAdapter(adapter);

        pd.dismiss();

        return view;
    }

    public class NewsAdapter extends ArrayAdapter<NewsItem> {
        // Adapter code goes in here... removed as not necessary
    }



    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        ViewGroup viewGroup = (ViewGroup) view;

        // As we're using a ListFragment we create a PullToRefreshLayout manually
        mPullToRefreshLayout = new PullToRefreshLayout(viewGroup.getContext());

        // We can now setup the PullToRefreshLayout
        ActionBarPullToRefresh.from(getActivity())
                // We need to insert the PullToRefreshLayout into the Fragment ViewGroup
                .insertLayoutInto(viewGroup)
                // Here we mark just the ListView and it Empty View as pullable
                .theseChildrenArePullable(android.R.id.list, android.R.id.empty)
                .listener(this)
                .setup(mPullToRefreshLayout);

    }



    @Override
    public void onRefreshStarted(View view) {
        // Hide the list
        // setListShown(false);
        listview.setVisibility(View.INVISIBLE);

        /**
         * Simulate Refresh with 4 seconds sleep
         */
        new AsyncTask<Void, Void, Void>() {

            @Override
            protected Void doInBackground(Void... params) {
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return null;
            }

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

                // Notify PullToRefreshLayout that the refresh has finished
                mPullToRefreshLayout.setRefreshComplete();

                if (getView() != null) {
                    // Show the list again
                    //setListShown(true);
                    listview.setVisibility(View.VISIBLE);
                }
            }
        }.execute();
    }

}

Where am I mistaken? If someone has an example with a snippet with a list, share the link here.

Thanks!!!

[EDIT]

changed it

theseChildrenArePullable(android.R.id.list, android.R.id.empty)

to

theseChildrenArePullable(R.id.listview_news_list, android.R.id.empty)

and he worked ...

+4
source share
2 answers

, , ListView Fragment, , :

// setup the PullToRefreshLayout
    ActionBarPullToRefresh.from(getActivity())
            // We need to insert the PullToRefreshLayout into the Fragment ViewGroup
            .insertLayoutInto(viewGroup)
            // Here we mark just the ListView and it Empty View as pullable
            .theseChildrenArePullable(R.id. listview_news_list, android.R.id.empty)
            .listener(this)
            .setup(mPullToRefreshLayout);

, onCreateView:

mPullToRefreshLayout = ((PullToRefreshLayout) view.findViewById(R.id.ptr_layout));

: onActivityCreated onViewCreated:

ActionBarPullToRefresh
    .from(getActivity())
    .allChildrenArePullable()
    .listener(this)
    .setup(this.mPullToRefreshLayout);

PullToRefreshLayout , . , .

+5

ActionBarPullToRefresh onCreate , onViewCreated . Activity .

-3

All Articles