Le contenu des notes d'étude provient de github
android_my_pull_refresh_view
Aperçu
Il s'agit d'un composant général à chargement automatique d'actualisation et d'extraction. Le composant hérite de LinearLayout, la direction est la disposition verticale et se compose de trois parties, à savoir En-tête, ContentView et Pied de page. La largeur et la hauteur de ContentView sont match_parent, footer. La largeur et la hauteur de l'en-tête et de l'en-tête sont respectivement match_parent et wrap_content. L'en-tête et le pied de page seront masqués en définissant le remplissage au début, et seule la zone ContentView sera affichée. Lorsque l'utilisateur descend vers le haut et continue de tirer vers le bas, l'opération d'actualisation de tirage vers le bas est déclenchée; lorsque l'utilisateur tire vers le bas et continue de tirer vers le haut, d'autres opérations sont déclenchées pour charger.
Pour plus d'informations, veuillez consulter mon blog
Les bibliothèques de ce projet sont utilisées pour illustrer les principes de base et il n'est pas recommandé de les utiliser dans le projet.
## a, une mise en page schématique de la mise en page d' origine
L'en-tête et le pied de page sont décalés de l'écran une fois le remplissage défini
2. Exemples d'utilisation de composants existants
Les exemples suivants sont tous illustrés dans une activité.
2.1 Utiliser 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);
}
}
Déroulez pour actualiser la capture d'écran
Chargement automatique de haut en bas
2.2 Utiliser TextView qui peut être tiré vers le bas pour actualiser
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);
}
}
Capture d'écran
Troisièmement, étendre le composant
3.1, hérité de PullRefreshBase
T为你要实现下拉刷新的View的类型,如ListView.
3.2, initialiser ContentView
Remplacez la méthode initContentView et initialisez l'objet mContentView dans cette fonction. Prenons ListView comme exemple, par exemple:
/*
* 初始化mContentView
* @see com.uit.pullrefresh.base.PullRefreshBase#initContentView()
*/
@Override
protected void initContentView() {
// 初始化mContentView
mContentView = new ListView(getContext());
// 设置OnScrollListener, 用以实现滑动到底部时的自动加载功能,如果不需要该功能可以不设置.
mContentView.setOnScrollListener(this);
}
3.3. Écraser la méthode pour déterminer s'il faut glisser vers le haut et vers le bas
Prenons ListView comme exemple, par exemple:
/*
* 是否滑动到了顶端,如果返回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
Append: un framework plus puissant