RecyclerView.Adapter
8214 ワード
RecyclerViewは言うまでもなく、ListViewに代わる新しいコントロールです.そのアダプタは柔軟性にあります.
RecyclerViewのitemがクリックイベントをサポートし、最後にドロップダウンするとProgressBarがロードしていることを示し、より多くのデータをロードする必要があります.
1.クリックイベントの実装
まずインタフェースを定義します
アダプタコンストラクション関数、Clickオブジェクトの転送を増やす
ItemのHolderオブジェクトを作成する場合は、ClickオブジェクトをHolderのコンストラクション関数に渡します(以下、キーコードのみを保持します).
HolderクラスでのClickイベントの処理
注意:Holderクラスのコンストラクション関数でClickオブジェクトを取得した後、itemViewにクリックイベントを設定する必要があります.itemのsubviewに個別のクリックイベントを設定する必要がある場合は、対応するviewにクリックイベントを設定すればよい.
Clickイベントの呼び出し:
注意:異なるsubviewに対するクリックイベント処理が必要な場合は、onItemClickではviewタイプまたは他のtagクラスIDに基づいて区別して自己処理する必要があります.
2.下部Progressbarロード表示.ListViewのアダプタと同様に、通常は通常itemを表示し、ロードしたitemが現在最後であるか否かを判断し、現在最後であればカスタムFootviewとして表示し、データロードを行うことを通知し、データロード完了後にリフレッシュする.
まず、2つのitemのHolderを定義し、正常と下部を定義し、アダプタで判断する必要があります.
2つの値を定義して、異なるholderを区別します.
getItemView Typeを再ロードし、現在位置からFootViewをロードするかどうかを判断します.
現在のタイプに応じて異なるViewHolderをロード
より多くのロードがトリガーされ、現在スクロールされているitemの位置を判断するには、RecyclerViewのsetOnScrollListenerイベントのみが使用されます.
終わります.
RecyclerViewのitemがクリックイベントをサポートし、最後にドロップダウンするとProgressBarがロードしていることを示し、より多くのデータをロードする必要があります.
1.クリックイベントの実装
まずインタフェースを定義します
public interface RecyclerViewClickListener {
void onItemClick(View view,int position);
}
アダプタコンストラクション関数、Clickオブジェクトの転送を増やす
1 private RecyclerViewClickListener mClickListener;
2
3 public PostListAdapter(RequestQueue rQueue, RecyclerViewClickListener clickListener) {
4
5 this.mClickListener = clickListener;
6 }
ItemのHolderオブジェクトを作成する場合は、ClickオブジェクトをHolderのコンストラクション関数に渡します(以下、キーコードのみを保持します).
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
NormalAnswerHolder holder = new NormalAnswerHolder(
LayoutInflater.from(parent.getContext()).inflate(R.layout.item_home, parent, false), mClickListener);
return holder;
}
}
HolderクラスでのClickイベントの処理
1 class NormalAnswerHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
2 private RecyclerViewClickListener mClickListener;
3 private TextView textViewName;
4 private TextView textViewCount;
5 private TextView textViewExcerpt;
6
7 public NormalAnswerHolder(View view, RecyclerViewClickListener clickListener) {
8 super(view);
9 this.mClickListener = clickListener;
10 textViewName = (TextView) view.findViewById(R.id.tv_name);
11 textViewCount = (TextView) view.findViewById(R.id.tv_count);
12 textViewExcerpt = (TextView)view.findViewById(R.id.tv_excerpt);
13
14 itemView.setOnClickListener(this);
15 }
16
17
18 /**
19 * Click event.
20 *
21 * @param v
22 */
23 @Override
24 public void onClick(View v) {
25 if (mClickListener != null) {
26 mClickListener.onItemClick(v, getPosition());
27 }
28 }
29 }
注意:Holderクラスのコンストラクション関数でClickオブジェクトを取得した後、itemViewにクリックイベントを設定する必要があります.itemのsubviewに個別のクリックイベントを設定する必要がある場合は、対応するviewにクリックイベントを設定すればよい.
Clickイベントの呼び出し:
1 mAdapter = new PostListAdapter(mQueue, new RecyclerViewClickListener() {
2 @Override
3 public void onItemClick(View view, int position) {
4 Intent intent = new Intent(getActivity(), ArticleDetailActivity.class);
5 Post post = mAdapter.getPost(position);
6 if (post == null) return;
7 intent.putExtra(Define.KEY_DATE, post.getDate());
8 intent.putExtra(Define.KEY_NAME, post.getName());
9 startActivity(intent);
10 }
11 });
注意:異なるsubviewに対するクリックイベント処理が必要な場合は、onItemClickではviewタイプまたは他のtagクラスIDに基づいて区別して自己処理する必要があります.
2.下部Progressbarロード表示.ListViewのアダプタと同様に、通常は通常itemを表示し、ロードしたitemが現在最後であるか否かを判断し、現在最後であればカスタムFootviewとして表示し、データロードを行うことを通知し、データロード完了後にリフレッシュする.
まず、2つのitemのHolderを定義し、正常と下部を定義し、アダプタで判断する必要があります.
private final int TYPE_ITEM = 0;
private final int TYPE_FOOTER = 1;
2つの値を定義して、異なるholderを区別します.
@Override
public int getItemViewType(int position) {
if (position + 1 == getItemCount()) {
return TYPE_FOOTER;
} else {
return TYPE_ITEM;
}
}
getItemView Typeを再ロードし、現在位置からFootViewをロードするかどうかを判断します.
1 @Override
2 public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
3 if (viewType == TYPE_FOOTER) {
4 FooterViewHolder holder = new FooterViewHolder(
5 LayoutInflater.from(parent.getContext()).inflate(R.layout.footerview, parent, false));
6 return holder;
7 }else{
8 NormalAnswerWithDateHolder holder = new NormalAnswerWithDateHolder(
9 LayoutInflater.from(parent.getContext()).inflate(R.layout.item_homewithdate, parent, false), mClickListener);
10 return holder;
11 }
12 }
現在のタイプに応じて異なるViewHolderをロード
より多くのロードがトリガーされ、現在スクロールされているitemの位置を判断するには、RecyclerViewのsetOnScrollListenerイベントのみが使用されます.
1 mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
2 @Override
3 public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
4 super.onScrollStateChanged(recyclerView, newState);
5 if (newState == RecyclerView.SCROLL_STATE_IDLE
6 && mLinearLayoutManager.findLastVisibleItemPosition() + 1
7 == mAdapter.getItemCount()) {
8 requestOldData();
9 }
10 }
11 });
終わります.