Android開発ノートのSwipeRefreshLayout


SwipeRefreshLayoutの概要
SwipeRefrshLayoutはGoogleの公式更新のコントロールであり、ViewGroupからsupport-v 4互換パッケージに統合されたドロップダウンリフレッシュの効果を実現することができる.
Androidソースでは、主に連絡先インタフェースで連絡先データをリフレッシュします.
packages/apps/Contacts/src/com/android/contacts/list/DefaultContactBrowseListFragment.java

フォルダに適用されたファイルの表示画面:
packages/apps/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java

Demo
主にドロップダウンSwipeRefrshLayoutコントロールを実現し、listviewコントロールのデータを更新する.
(1)レイアウトファイル-activity_main.xml



    

    
        
    



(2)実現ロジック
public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener{

    private final static String TAG = "MainActivity";

    private SwipeRefreshLayout swipeRefreshLayout;
    private TextView textView;
    private ListView listview;
    private ArrayAdapter adapter;
    private List data;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    private void init() {
        swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);
        swipeRefreshLayout.setOnRefreshListener(this);
        swipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_bright,
                android.R.color.holo_green_light, android.R.color.holo_orange_light,
                android.R.color.holo_red_light);

        textView = (TextView) findViewById(R.id.textView);
        listview = (ListView) findViewById(R.id.listView);
        data = new ArrayList();
        for (int i = 0; i < 5; i++) {
            data.add("   item :" + i);
        }
        adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, data);
        listview.setAdapter(adapter);
    }

    public void showLoading() {
        textView.setText("    ,   ");
    }

    public void hideLoading() {
        textView.setText("    !");
        swipeRefreshLayout.setVisibility(View.VISIBLE);
        swipeRefreshLayout.setRefreshing(false); // close refresh animator
    }

    @Override
    public void onRefresh() {
        Log.i(TAG,"onRefresh()");
        showLoading();
        final Random random = new Random();
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                hideLoading();
                int min=1;
                int max=20;
                Random random = new Random();
                int num = random.nextInt(max)%(max-min+1) + min;
                data.clear();
                for(int i=0;i < num;i++){
                    data.add("      item:"+i);
                }
                adapter.notifyDataSetChanged();
            }
        }, 5000);
    }

}

参考資料
1.Androidゼロベース入門|SwipeRefreshLayoutドロップダウンリフレッシュhttp://www.sohu.com/a/195607552_6194672.SwipeRefreshLayout+RecyclerViewでアップ・リフレッシュとダウン・リフレッシュを実現https://www.cnblogs.com/liunanjava/p/5860024.html