Android Pull Torefresh-ListView使用詳細

8100 ワード

この間、ListViewを使っているうちに、Pull ToRefreshの使い方を発見しました.アップデートに使いやすいと思います.ここで共有します.参考にしてください.
    Pull Torefresh方法はオープンソースのサードパーティプラグインとして使用されるため、使用手順は以下の通りである.
1、GitHubの上でソースコードと使用するカバンをダウンロードしました.住所はhttps://github.com/chrisbanes/Android-PullToRefreshを選択します.(これ以上詳細な導入説明はしない)
2、導入が完了したら、自分のxmlファイルの作成を開始できます.具体的なコードは以下の通りです.
注意:Pull Torefreshの属性を使うためには、名前空間が必要です.
xmlns:ptr = "http://schemas.android.com/apk/res-auto"
ptr:ptrMode="both"
この2行のコードは省略できません.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/bg"
    tools:context=".MainActivity">
    
    <com.handmark.pulltorefresh.library.PullToRefreshListView
        xmlns:ptr = "http://schemas.android.com/apk/res-auto"
        android:id="@+id/pull_refresh_list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:dividerHeight="1dp"
        android:fadingEdge="none"
        android:fastScrollEnabled="false"
        android:footerDividersEnabled="false"
        android:headerDividersEnabled="false"
        android:smoothScrollbar="true"
        android:focusableInTouchMode="true"
        android:focusable="true"
        ptr:ptrMode="both"/>
    
</LinearLayout>

3、javaファイルを作成し、具体的なコードは以下の通りです.
package pulltorefresh.pulltorefresh;

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener2;
import com.handmark.pulltorefresh.library.PullToRefreshListView;

import java.util.Arrays;
import java.util.LinkedList;

/**
 * PullToRefresh
 * write by jimmy.li
 * 2016/4/9  22:58
 */

public class MainActivity extends Activity {

    private LinkedList<String> mListItems;
    private PullToRefreshListView mPullRefreshListView;
    private ArrayAdapter<String> mAdapter;

    private int mDowmAddNum = 1;
    private int mUpAddNum = 1;

    //      5 listItem
    private int mAddFalg = 5;

    //   
    private String[] mStrings = {"Jimmy1", "Jimmy2", "Jimmy3", "Jimmy4", "Jimmy5",
            "Jimmy6", "Jimmy7", "Jimmy8", "Jimmy9", "Jimmy10", "Jimmy11", "Jimmy12",
            "Jimmy13", "Jimmy14", "Jimmy15", "Jimmy16", "Jimmy17", "Jimmy18", "Jimmy19",
            "Jimmy20", "Jimmy21", "Jimmy22", "Jimmy23", "Jimmy24", "Jimmy25", "Jimmy26"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        initUI();
        initData();

    }

    private void initData() {
        /**
         *        OnRefreshListener2<ListView>                   
         */
        mPullRefreshListView.setOnRefreshListener(new OnRefreshListener2<ListView>() {
            //onPullDownToRefresh
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                Toast.makeText(MainActivity.this, "onPullDownToRefresh", Toast.LENGTH_SHORT).show();
                for (int i = 1; i <= mAddFalg; i++) {
                    mListItems.addFirst("Added Later refresh..." + mDowmAddNum);
                    mDowmAddNum++;
                }
                 new GetDataTask().execute();
            }


            //onPullUpToRefresh
            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                Toast.makeText(MainActivity.this, "onPullUpToRefresh", Toast.LENGTH_SHORT).show();
                for (int i = 1; i <= mAddFalg; i++) {
                    mListItems.addLast("Added after refresh..." + mUpAddNum);
                    mUpAddNum++;
                }

                 new GetDataTask().execute();
            }
        });


        //       
        ListView actualListView = mPullRefreshListView.getRefreshableView();

        registerForContextMenu(actualListView);

        mListItems = new LinkedList<String>();
        mListItems.addAll(Arrays.asList(mStrings));

        //     
        mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mListItems);
        actualListView.setAdapter(mAdapter);
    }

    private void initUI() {
        mPullRefreshListView = (PullToRefreshListView) findViewById(R.id.pull_refresh_list);
    }

    //                 
    //
    private class GetDataTask extends AsyncTask<Void, Void, String[]> {

        //       
        @Override
        protected String[] doInBackground(Void... params) {
            // Simulates a background job.
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            }
            return mStrings;
        }

        //     UI
        @Override
        protected void onPostExecute(String[] result) {
            mAdapter.notifyDataSetChanged();

            // Call onRefreshComplete when the list has been refreshed.
            mPullRefreshListView.onRefreshComplete();
            super.onPostExecute(result);
        }
    }
}

4、主要コード説明.
private void initData() {
        /**
         *        OnRefreshListener2<ListView>                   
         */
        mPullRefreshListView.setOnRefreshListener(new OnRefreshListener2<ListView>() {
            //onPullDownToRefresh
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                Toast.makeText(MainActivity.this, "onPullDownToRefresh", Toast.LENGTH_SHORT).show();
                for (int i = 1; i <= mAddFalg; i++) {
                    mListItems.addFirst("Added Later refresh..." + mDowmAddNum);
                    mDowmAddNum++;
                }
                 new GetDataTask().execute();
            }


            //onPullUpToRefresh
            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                Toast.makeText(MainActivity.this, "onPullUpToRefresh", Toast.LENGTH_SHORT).show();
                for (int i = 1; i <= mAddFalg; i++) {
                    mListItems.addLast("Added after refresh..." + mUpAddNum);
                    mUpAddNum++;
                }

                 new GetDataTask().execute();
            }
        });
上は主にinitData()関数を利用してPullTorefresh上にドロップダウンしてリフレッシュする主要コードをパッケージ化し、それぞれそのドロップダウンとプルアップイベントモニターに対応しています.

 //       
        ListView actualListView = mPullRefreshListView.getRefreshableView();

        registerForContextMenu(actualListView);

        mListItems = new LinkedList<String>();
        mListItems.addAll(Arrays.asList(mStrings));

        //     
        mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mListItems);
        actualListView.setAdapter(mAdapter);
上のコードは主にListView空間を取得して登録し、アダプターを設置してListViewを表示します.
Good luck
Write by Jimmy.li