研究ノートの内容はgithubからのものです
android_my_pull_refresh_view
概観
これは一般的なプルダウンリフレッシュおよびプルアップ自動ロードコンポーネントです。コンポーネントはLinearLayoutから継承され、方向は垂直レイアウトで、Header、ContentView、およびFooterの3つの部分で構成されます。ContentViewの幅と高さはmatch_parent、footerです。ヘッダーとヘッダーの幅と高さはそれぞれmatch_parentとwrap_contentです。ヘッダーとフッターは最初にパディングを設定することによって非表示になり、ContentView領域のみが表示されます。ユーザーが上にプルダウンしてプルダウンし続けると、プルダウンリフレッシュ操作がトリガーされます。ユーザーが下に引き上げてプルし続けると、ロードするためにさらに多くの操作がトリガーされます。
詳細については、私のブログを参照してください
このプロジェクトのライブラリは、基本的な原理を説明するために使用されており、プロジェクトでの使用は推奨されていません。
ヘッダーとフッターは、パディングの設定後に画面からオフセットされます
2.既存のコンポーネントの使用例
以下の例はすべてアクティビティで示されています。
2.1 PullRefreshListViewを使用する
public class MainActivity extends Activity {
ListView mListView;
PullRefreshListView mPullRefreshListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 下拉刷新的listview
mPullRefreshListView = new PullRefreshListView(this);
// 获取listview 对象, 即PullRefreshListView中的mContentView
mListView = mPullRefreshListView.getContentView();
List<String> datas = new ArrayList<String>();
for (int i = 0; i < 5; i++) {
datas.add(" Item - " + i);
}
// 设置adapter
mListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
datas));
// 下拉刷新
mPullRefreshListView.setOnRefreshListener(new OnPullRefreshListener() {
@Override
public void onRefresh() {
Toast.makeText(getApplicationContext(), "refresh", Toast.LENGTH_SHORT).show();
mPullRefreshListView.postDelayed(new Runnable() {
@Override
public void run() {
mPullRefreshListView.refreshComplete();
}
}, 2000);
}
});
// 上拉自动加载
mPullRefreshListView.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore() {
Toast.makeText(getApplicationContext(), "load more", Toast.LENGTH_SHORT).show();
mPullRefreshListView.postDelayed(new Runnable() {
@Override
public void run() {
mPullRefreshListView.loadMoreComplete();
}
}, 1500);
}
});
setContentView(mPullRefreshListView);
}
}
プルダウンしてスクリーンショットを更新します
2.2プルダウンして更新できるTextViewを使用する
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// PullRefreshTextView
final PullRefreshTextView pullRefreshTextView = new PullRefreshTextView(this);
pullRefreshTextView.getContentView().setText("下拉刷新TextView");
// 下拉刷新
pullRefreshTextView.setOnRefreshListener(new OnPullRefreshListener() {
@Override
public void onRefresh() {
pullRefreshTextView.getContentView().setText(new Date().toGMTString());
pullRefreshTextView.postDelayed(new Runnable() {
@Override
public void run() {
pullRefreshTextView.refreshComplete();
}
}, 1000);
}
});
// 上拉自动加载, TextView不能设置scroll listener ,所以无效
pullRefreshTextView.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore() {
Toast.makeText(getApplicationContext(), "textview load", Toast.LENGTH_SHORT).show();
pullRefreshTextView.postDelayed(new Runnable() {
@Override
public void run() {
pullRefreshTextView.loadMoreComplete();
}
}, 1000);
}
});
setContentView(pullRefreshTextView);
}
}
スクリーンショット
3、コンポーネントを拡張する
3.1、PullRefreshBaseから継承
T为你要实现下拉刷新的View的类型,如ListView.
3.2、ContentViewを初期化する
initContentViewメソッドをオーバーライドし、この関数でmContentViewオブジェクトを初期化します。たとえば、ListViewを例に考えてみましょう。
/*
* 初始化mContentView
* @see com.uit.pullrefresh.base.PullRefreshBase#initContentView()
*/
@Override
protected void initContentView() {
// 初始化mContentView
mContentView = new ListView(getContext());
// 设置OnScrollListener, 用以实现滑动到底部时的自动加载功能,如果不需要该功能可以不设置.
mContentView.setOnScrollListener(this);
}
3.3。メソッドを上書きして、上下にスライドするかどうかを決定します
たとえば、ListViewを例に考えてみましょう。
/*
* 是否滑动到了顶端,如果返回true, 则表示到了顶端,用户继续下拉则触发下拉刷新
* @see com.uit.pullrefresh.base.PullRefreshBase#isTop()
*/
@Override
protected boolean isTop() {
View firstChild = mContentView.getChildAt(0);
if (firstChild == null) {
return true;
}
return mContentView.getFirstVisiblePosition() == 0
&& (firstChild.getTop() >= mContentView.getTop());
}
/*
* 下拉到listview 最后一项时则返回true, 将出发自动加载
* @see com.uit.pullrefresh.base.PullRefreshBase#isShowFooterView()
*/
@Override
protected boolean isShowFooterView() {
if (mContentView == null || mContentView.getAdapter() == null) {
return false;
}
return mContentView.getLastVisiblePosition() == mContentView.getAdapter().getCount() - 1;
}
https://github.com/hehonghui/android_my_pull_refresh_view
追加:より強力なフレームワーク