AndroidオープンソースプロジェクトPull Torefreshドロップリフレッシュ機能詳細2


まず効果図を見ます。

ここで紹介しているのはPull Torefresh GridViewの使い方です。前のPull Torefsh ListViewの方法と同じです。このオープンソースのプロジェクトはモジュール化が素晴らしいので、簡単に実現できます。同じように、前のコントロールを使って操作してもいいです。他の問題を考えなくてもいいです。 
考え方: 
1.レイアウトファイルを書いて、ドロップダウンでリフレッシュできるコントロールを入れます。 
2.ドロップダウンリフレッシュのコントロールを見つけて、モニターを設置し、リフレッシュ方法で非同期タスクを開いて操作します。 
3.このプルダウンリフレッシュコントロールのgetRefresheble View()方法によりGridViewオブジェクトを取得し、通常の操作でアダプタを設定する 
4.非同期タスクにおいて、Linked Listを通じて、頭または尻尾に新しいデータを追加する 
実装: 
1.レイアウトファイル 
私たちはGridViewを使うようにGridViewの属性を定義することができます。もちろんptr:名前空間によって専用属性を設定することができます。 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent" >

<!-- The PullToRefreshGridView replaces a standard GridView widget. -->
 <com.handmark.pulltorefresh.library.PullToRefreshGridView
  xmlns:ptr="http://schemas.android.com/apk/res-auto"
  android:id="@+id/pull_refresh_grid"
  android:layout_height="fill_parent"
  android:layout_width="fill_parent"
  android:numColumns="auto_fit"
  android:verticalSpacing="1dp"
  android:horizontalSpacing="1dp"
  android:columnWidth="100dp"
  android:stretchMode="columnWidth"
  android:gravity="fill"
  ptr:ptrMode="both"
  ptr:ptrDrawable="@drawable/ic_launcher" />

</LinearLayout>

2.これがドロップダウンしてリフレッシュできるコントロールを見つけ、モニターを設定します。 
ここのモニターは前の文章と違って、双方向です。スライド操作を監督しやすいです。 

 /**
  *       view,        
  */
 private void initPTRGrideView() {
  //        GridView
  mPullRefreshGridView = (PullToRefreshGridView) findViewById(R.id.pull_refresh_grid);
  //      ,               ,           
  mPullRefreshGridView.setOnRefreshListener(new OnRefreshListener2<GridView>() {

   @Override
   public void onPullDownToRefresh(PullToRefreshBase<GridView> refreshView) {
    Toast.makeText(getApplicationContext(), "  ", Toast.LENGTH_SHORT).show();
    new GetDataTask(mPullRefreshGridView, mAdapter, mListItems).execute();
   }

   @Override
   public void onPullUpToRefresh(PullToRefreshBase<GridView> refreshView) {
    Toast.makeText(getApplicationContext(), "  ", Toast.LENGTH_SHORT).show();
    new GetDataTask(mPullRefreshGridView, mAdapter, mListItems).execute();
   }

  });
 }

3.GridViewを見つけてアダプターの設定を行います。 

 //      ,      string  
 private LinkedList<String> mListItems;
 //         
 private PullToRefreshGridView mPullRefreshGridView;
 //       ,     PullToRefreshGridView ,           
 private GridView mGridView;
 //  GridView    
 private ArrayAdapter<String> mAdapter;

アダプターにデータがない時に表示される内容を設定することもできます。呼び出す方法は:setEmptyView() 

 /**
  *   GridView,     ,       
  */
 private void initGrideView() {
  mGridView = mPullRefreshGridView.getRefreshableView();
  //  String  ,      LinkedList ,           LinkedList              
  String []data = new String[] {"android","ios","wp","java","c++","c#"};
  mListItems = new LinkedList<String>();
  mListItems.addAll(Arrays.asList(data));

  //                 ,             string  ,      “    ,      ”
  TextView tv = new TextView(this);
  tv.setGravity(Gravity.CENTER);
  tv.setText("    ,      ");
  //             
  mPullRefreshGridView.setEmptyView(tv);

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

4.非同期タスクを実行し、データのロードをシミュレーションします。これは前の書き方と同じです。 

package com.kale.ptrgridview;

import java.util.LinkedList;

import android.os.AsyncTask;
import android.widget.ArrayAdapter;

import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode;
import com.handmark.pulltorefresh.library.PullToRefreshGridView;

/**
 * @author:Jack Tony
 * @tips :               ,    
 * @date :2014-10-14
 */
public class GetDataTask extends AsyncTask<Void, Void, Void>{

 private PullToRefreshGridView mPullRefreshGridView;
 private ArrayAdapter<String> mAdapter;
 private LinkedList<String> mListItems;
 
 
 public GetDataTask(PullToRefreshGridView gridView,
   ArrayAdapter<String> adapter,LinkedList<String> listItems) {
  // TODO            
  mPullRefreshGridView = gridView;
  mAdapter = adapter;
  mListItems = listItems;
 }
 
 @Override
 protected Void doInBackground(Void... params) {
  //    ,  2  
  try {
   Thread.sleep(2000);
  } catch (InterruptedException e) {
  }
  return null;
 }
 
 @Override
 protected void onPostExecute(Void result) {
  // TODO          
  super.onPostExecute(result);
  
  //       ,              
  Mode mode = mPullRefreshGridView.getCurrentMode();
  if(mode == Mode.PULL_FROM_START) {
   mListItems.addFirst("         ");
  }
  else {
   mListItems.addLast("         ");
  }
  //        
  mAdapter.notifyDataSetChanged();
  //          
  mPullRefreshGridView.onRefreshComplete();
  
 }
 


}

MainActivity.JAVAの全コード 

package com.kale.ptrgridview;

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

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.TextView;
import android.widget.Toast;

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

public class MainActivity extends Activity {
 
 //      ,      string  
 private LinkedList<String> mListItems;
 //         
 private PullToRefreshGridView mPullRefreshGridView;
 //       ,     PullToRefreshGridView ,           
 private GridView mGridView;
 //  GridView    
 private ArrayAdapter<String> mAdapter;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  initView();
 }

 private void initView() {
  // TODO          
  initPTRGrideView();
  initGrideView();
 }

 /**
  *       view,        
  */
 private void initPTRGrideView() {
  //        GridView
  mPullRefreshGridView = (PullToRefreshGridView) findViewById(R.id.pull_refresh_grid);
  //      ,               ,           
  mPullRefreshGridView.setOnRefreshListener(new OnRefreshListener2<GridView>() {

   @Override
   public void onPullDownToRefresh(PullToRefreshBase<GridView> refreshView) {
    Toast.makeText(getApplicationContext(), "  ", Toast.LENGTH_SHORT).show();
    new GetDataTask(mPullRefreshGridView, mAdapter, mListItems).execute();
   }

   @Override
   public void onPullUpToRefresh(PullToRefreshBase<GridView> refreshView) {
    Toast.makeText(getApplicationContext(), "  ", Toast.LENGTH_SHORT).show();
    new GetDataTask(mPullRefreshGridView, mAdapter, mListItems).execute();
   }

  });
 }
 
 /**
  *   GridView,     ,       
  */
 private void initGrideView() {
  mGridView = mPullRefreshGridView.getRefreshableView();
  //  String  ,      LinkedList ,           LinkedList              
  String []data = new String[] {"android","ios","wp","java","c++","c#"};
  mListItems = new LinkedList<String>();
  mListItems.addAll(Arrays.asList(data));

  //                 ,             string  ,      “    ,      ”
  TextView tv = new TextView(this);
  tv.setGravity(Gravity.CENTER);
  tv.setText("    ,      ");
  //             
  mPullRefreshGridView.setEmptyView(tv);

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

ソースのダウンロード:http://xiazai.jb51.net/201609/yuanma/AndroidGridView(jb 51.net)rar
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。