AndroidはRecyclerViewのリフレッシュロードとサイドスライドメニューを統合したPullToRefresh
22474 ワード
この2,3日は通常のプロジェクトで使用されるリフレッシュロードとサイドスライドメニューを整理しました.PullToRefreshフレームには、RecyclerViewと、RecyclerViewを使用して実装されたサイドスライドメニューが追加されています.
まず効果図を見てみましょう.
ここはPullToRefreshフレームワークに基づいているので、ここではListViewを1つの代表(GridView,ScrollView,WebViewなど、使い方は基本的にListViewと同じ)、RecyclerViewとSwipeRecyclerViewの2つの使い方も似ていますが、少し違います.
使い方はListViewからご紹介します(PullToRefreshフレームワークの基本的な使い方):
ここのAdapterは、普段よく使われている継承BaseAdapterの書き方です.
リフレッシュ・ロードのあるRecyclerViewの使用方法:
ここでは、RecyclerViewのリフレッシュロードとそれ自体のプロパティ設定が別々に制御されていることに注意してください.つまり、PullToRefreshRecyclerViewによってリフレッシュロードを制御するだけです.setLayoutManagerについては、setAdapterはgetRefreshableView()によってRecyclerViewの参照を得る必要があります.
最後にサイドスライドメニュー付きのRecyclerViewですが、ここでは特に厳振傑大神に感謝します.彼が書いたこれは私が今出会った比較的良いサイドスライドメニューです.会社のプロジェクトの需要によって、ただ1つのサイドスライド機能が必要かもしれないので、ここで私は彼のソースコードから単独で右側のサイドスライドメニュー機能を提出して、次に使い方を見てみましょう:まず、正常なインスタンス化で、リフレッシュロードモードを設定して、ロードリスニングを設定します.
次に、私たちの上のRecyclerViewと同じように、getRefreshableView()でSwipeMenuRecyclerViewを入手し、初期化方法を設定します.
次に、サイドスライドメニューとメニュークリックイベントを追加する方法を示します.
上のいくつかの注釈は、どのようにコントロールするかを知っていると信じています.
次にこのSwipeMenuRecyclerViewのAdapterについてお話しします.上の2つは基本的にオリジナルのアダプタの書き方ですが、このAdaperはSwipeMenuAdapterを継承する必要があります.下に私のDemoのサイドスライドAdapterを直接貼ります.
基本的な使い方はこれだけですが、PullToRefresh Moduleに統合されています.必要なものがあればDemoを直接ダウンロードし、pulltorefresh Moduleを参照すればいいです.
GitHubアドレスが嬉しいなら、ついでにスターにあげてもいいですよ.
参照リンク:http://blog.csdn.net/xuehuayous/article/details/50387089 http://blog.csdn.net/yanzhenjie1003/article/details/52115566
まず効果図を見てみましょう.
ここはPullToRefreshフレームワークに基づいているので、ここではListViewを1つの代表(GridView,ScrollView,WebViewなど、使い方は基本的にListViewと同じ)、RecyclerViewとSwipeRecyclerViewの2つの使い方も似ていますが、少し違います.
使い方はListViewからご紹介します(PullToRefreshフレームワークの基本的な使い方):
pull_listView = (PullToRefreshListView) findViewById(R.id.pull_listView);
adapter = new ListViewAdapter(list, this);
// : BOTH , PULL_FROM_END , PULL_FROM_START ,DISABLED ,
pull_listView.setMode(PullToRefreshBase.Mode.BOTH);
pull_listView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() {
@Override
public void onPullDownToRefresh(PullToRefreshBase refreshView) {
//
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(MainActivity.SLEEP_TIME);
runOnUiThread(new Runnable() {
@Override
public void run() {
list.clear();
DataModel.initData(list, "ListView");
adapter.notifyDataSetChanged();
Toast.makeText(PullListViewActivity.this, " ", Toast.LENGTH_SHORT).show();
pull_listView.onRefreshComplete();
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
@Override
public void onPullUpToRefresh(PullToRefreshBase refreshView) {
//
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(MainActivity.SLEEP_TIME);
runOnUiThread(new Runnable() {
@Override
public void run() {
DataModel.initData(list, "ListView");
adapter.notifyDataSetChanged();
pull_listView.onRefreshComplete();
Toast.makeText(PullListViewActivity.this, " ", Toast.LENGTH_SHORT).show();
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
});
pull_listView.setAdapter(adapter);
ここのAdapterは、普段よく使われている継承BaseAdapterの書き方です.
リフレッシュ・ロードのあるRecyclerViewの使用方法:
pull_recyclerView = (PullToRefreshRecyclerView) findViewById(R.id.pull_recyclerView);
recyclerView = pull_recyclerView.getRefreshableView();
recyclerView.setLayoutManager(new LinearLayoutManager(this));
pull_recyclerView.setMode(PullToRefreshBase.Mode.BOTH);
pull_recyclerView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() {
@Override
public void onPullDownToRefresh(PullToRefreshBase refreshView) {
//
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(MainActivity.SLEEP_TIME);
runOnUiThread(new Runnable() {
@Override
public void run() {
list.clear();
DataModel.initData(list, "RecyclerView");
adapter.notifyDataSetChanged();
Toast.makeText(PullRecyclerViewActivity.this, " ", Toast.LENGTH_SHORT).show();
pull_recyclerView.onRefreshComplete();
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
@Override
public void onPullUpToRefresh(PullToRefreshBase refreshView) {
//
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(MainActivity.SLEEP_TIME);
runOnUiThread(new Runnable() {
@Override
public void run() {
DataModel.initData(list, "RecyclerView");
adapter.notifyDataSetChanged();
Toast.makeText(PullRecyclerViewActivity.this, " ", Toast.LENGTH_SHORT).show();
pull_recyclerView.onRefreshComplete();
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
});
adapter = new RecylerViewAdapter(list);
recyclerView.setAdapter(adapter);
ここでは、RecyclerViewのリフレッシュロードとそれ自体のプロパティ設定が別々に制御されていることに注意してください.つまり、PullToRefreshRecyclerViewによってリフレッシュロードを制御するだけです.setLayoutManagerについては、setAdapterはgetRefreshableView()によってRecyclerViewの参照を得る必要があります.
最後にサイドスライドメニュー付きのRecyclerViewですが、ここでは特に厳振傑大神に感謝します.彼が書いたこれは私が今出会った比較的良いサイドスライドメニューです.会社のプロジェクトの需要によって、ただ1つのサイドスライド機能が必要かもしれないので、ここで私は彼のソースコードから単独で右側のサイドスライドメニュー機能を提出して、次に使い方を見てみましょう:まず、正常なインスタンス化で、リフレッシュロードモードを設定して、ロードリスニングを設定します.
pull_swipe_recyclerView = (PullToRefreshSwipeRecyclerView) findViewById(R.id.pull_swipe_recyclerView);
pull_swipe_recyclerView.setMode(PullToRefreshBase.Mode.BOTH);
pull_swipe_recyclerView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() {
@Override
public void onPullDownToRefresh(PullToRefreshBase refreshView) {
//
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(MainActivity.SLEEP_TIME);
runOnUiThread(new Runnable() {
@Override
public void run() {
list.clear();
DataModel.initData(list, "SwipeRecyclerView");
adapter.notifyDataSetChanged();
Toast.makeText(PullSwipeRecyclerViewActivity.this, " ", Toast.LENGTH_SHORT).show();
pull_swipe_recyclerView.onRefreshComplete();
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
@Override
public void onPullUpToRefresh(PullToRefreshBase refreshView) {
//
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(MainActivity.SLEEP_TIME);
runOnUiThread(new Runnable() {
@Override
public void run() {
DataModel.initData(list, "SwipeRecyclerView");
adapter.notifyDataSetChanged();
pull_swipe_recyclerView.onRefreshComplete();
Toast.makeText(PullSwipeRecyclerViewActivity.this, " ", Toast.LENGTH_SHORT).show();
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
});
次に、私たちの上のRecyclerViewと同じように、getRefreshableView()でSwipeMenuRecyclerViewを入手し、初期化方法を設定します.
swipe_recyclerView = pull_swipe_recyclerView.getRefreshableView();
swipe_recyclerView.setLayoutManager(new LinearLayoutManager(this));
//
swipe_recyclerView.setSwipeMenuCreator(creator);
//
swipe_recyclerView.setSwipeMenuItemClickListener(menuItemClickListener);
次に、サイドスライドメニューとメニュークリックイベントを追加する方法を示します.
/**
*
*/
private OnSwipeMenuItemClickListener menuItemClickListener = new OnSwipeMenuItemClickListener() {
/**
* Item 。
* @param closeable closeable. 。
* @param adapterPosition adapterPosition. item Adapter position。
* @param menuPosition menuPosition. position。 Item 2 MenuItem, position 0、1,
*/
@Override
public void onItemClick(Openable closeable, int adapterPosition, int menuPosition) {
closeable.smoothCloseMenu();// 。
Toast.makeText(PullSwipeRecyclerViewActivity.this, "adapter Position : " + adapterPosition + " , menuposition : " + menuPosition, Toast.LENGTH_SHORT).show();
}
};
/**
*
*/
SwipeMenuCreator creator = new SwipeMenuCreator() {
@Override
public void onCreateMenu(SwipeMenu swipeRightMenu, int viewType) {
String str = "";
int color = 0;
int width = getResources().getDimensionPixelSize(R.dimen.dp_70);
int widthdel = getResources().getDimensionPixelSize(R.dimen.dp_70);
// viewType Adapter getItemViewType ;
// switch (viewType) {
// case 0:
// width = getResources().getDimensionPixelSize(R.dimen.dp_70);
// str = " ";
// color = R.color.c_2ecc71;
// widthdel = getResources().getDimensionPixelSize(R.dimen.dp_70);
// break;
// case 1:
// width = getResources().getDimensionPixelSize(R.dimen.dp_100);
// widthdel = getResources().getDimensionPixelSize(R.dimen.dp_70);
// str = " ";
color = R.color.c_ff7a7a;
// break;
// case 3:
// width = 0;
// widthdel = 0;
// break;
// }
str = " ";
// , , 。
SwipeMenuItem deleteItem = new SwipeMenuItem(PullSwipeRecyclerViewActivity.this)
.setBackgroundDrawable(color)
.setText(str) // , , 。。
.setTextColor(Color.WHITE)
.setTextSize(16)
.setWidth(width)
.setHeight(getResources().getDimensionPixelSize(R.dimen.dp_70));
swipeRightMenu.addMenuItem(deleteItem);// 。
SwipeMenuItem addItem = new SwipeMenuItem(PullSwipeRecyclerViewActivity.this)
.setBackgroundDrawable(R.color.color_99)
.setText(" ")
.setTextColor(Color.WHITE)
.setTextSize(16)
.setWidth(widthdel)
.setHeight(getResources().getDimensionPixelSize(R.dimen.dp_70));
swipeRightMenu.addMenuItem(addItem); // 。
}
};
上のいくつかの注釈は、どのようにコントロールするかを知っていると信じています.
次にこのSwipeMenuRecyclerViewのAdapterについてお話しします.上の2つは基本的にオリジナルのアダプタの書き方ですが、このAdaperはSwipeMenuAdapterを継承する必要があります.下に私のDemoのサイドスライドAdapterを直接貼ります.
class SwipeRecyclerViewAdapter extends SwipeMenuAdapter<SwipeRecyclerViewAdapter.ViewHolder> {
private List list;
public SwipeRecyclerViewAdapter(List list) {
this.list = list;
}
@Override
public View onCreateContentView(ViewGroup parent, int viewType) {
return LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
}
@Override
public ViewHolder onCompatCreateViewHolder(View realContentView, int viewType) {
return new ViewHolder(realContentView);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.textView.setText(list.get(position));
}
@Override
public int getItemCount() {
return list.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public ViewHolder(View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(android.R.id.text1);
}
}
}
基本的な使い方はこれだけですが、PullToRefresh Moduleに統合されています.必要なものがあればDemoを直接ダウンロードし、pulltorefresh Moduleを参照すればいいです.
GitHubアドレスが嬉しいなら、ついでにスターにあげてもいいですよ.
参照リンク:http://blog.csdn.net/xuehuayous/article/details/50387089 http://blog.csdn.net/yanzhenjie1003/article/details/52115566