AndroidオープンソースプロジェクトPull Torefreshドロップリフレッシュ機能詳細2
9518 ワード
まず効果図を見ます。
ここで紹介しているのはPull Torefresh GridViewの使い方です。前のPull Torefsh ListViewの方法と同じです。このオープンソースのプロジェクトはモジュール化が素晴らしいので、簡単に実現できます。同じように、前のコントロールを使って操作してもいいです。他の問題を考えなくてもいいです。
考え方:
1.レイアウトファイルを書いて、ドロップダウンでリフレッシュできるコントロールを入れます。
2.ドロップダウンリフレッシュのコントロールを見つけて、モニターを設置し、リフレッシュ方法で非同期タスクを開いて操作します。
3.このプルダウンリフレッシュコントロールのgetRefresheble View()方法によりGridViewオブジェクトを取得し、通常の操作でアダプタを設定する
4.非同期タスクにおいて、Linked Listを通じて、頭または尻尾に新しいデータを追加する
実装:
1.レイアウトファイル
私たちはGridViewを使うようにGridViewの属性を定義することができます。もちろんptr:名前空間によって専用属性を設定することができます。
ここのモニターは前の文章と違って、双方向です。スライド操作を監督しやすいです。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
ここで紹介しているのは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以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。