ListView和RecyclerView默認記住第幾項總結(jié)
前言
項目中使用ListView或者RecyclerView要記住默認的第幾項或者是選中后背景需要改成自己需要的背景,這個時候查詢了網(wǎng)上的一些資料,說ListView是很好實現(xiàn)的梦重,因為他默認的有一個setSelection(position)的方法险毁,但是這個和自己想要的效果還是有些區(qū)別的砸西,結(jié)合網(wǎng)上的一些資料亚享,還有自己的一些實踐,來看下怎么完成的吧氯庆,有些說了RecyclerView實現(xiàn)有些麻煩纪蜒,但是我這種實現(xiàn)和ListView是一樣的衷恭。來看下吧
同步更新CSDN
http://blog.csdn.net/wuyinlei/article/details/52576521
ListView實現(xiàn)
- 首先我是在adapter里面定義一個int變量用來記錄是第幾項被選中(還有就是默認的第幾項選中)
//默認是第幾項
private int mPosition = 3;
public void setPosition(int position) {
mPosition = position;
}
- 然后就在getView(int i, View view, ViewGroup viewGroup)方法中通過判斷要展示的item的位置和這個位置是否相等,如果相等就設(shè)置自己想要的背景纯续,如果不相等随珠,那就是默認的背景(自己設(shè)置)。
if (mPosition == i) {
holder.mReRe.setBackground(mContext.getResources().getDrawable(R.drawable.spinner_ab_focused_example));
} else {
holder.mReRe.setBackground(mContext.getResources().getDrawable(R.drawable.spinner_ab_disabled_example));
}
- 最后在Activity或者fragment里面進行如下使用
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
mAdapter.setPosition(i); //把當(dāng)前點擊的位置傳遞過去
mAdapter.notifyDataSetChanged(); //通知listview刷新UI
}
});
RecyclerView實現(xiàn)
這個實現(xiàn)和Listview實現(xiàn)的步驟是一樣的猬错,只不過RecyclerView的點擊事件需要自己去寫窗看。
- 首先設(shè)置在adapter里面定義int變量記錄
//默認第幾項
private int mPosition = 0;
public void setPosition(int position) {
mPosition = position;
}
- 然后在onBindViewHolder(ViewHolder holder, int position)方法中通過判斷要展示的item的位置是否相等,如果相等就設(shè)置自己想要的背景倦炒,如果不相等显沈,那就是默認的背景(自己設(shè)置)
if (mPosition == position){
holder.mReRe.setBackground(holder.itemView.getContext().getResources().getDrawable(R.drawable.spinner_ab_focused_example));
} else {
holder.mReRe.setBackground(holder.itemView.getContext().getResources().getDrawable(R.drawable.spinner_ab_disabled_example));
}
- 設(shè)置點擊事件(adapter里面)
private OnItemClickListener mOnItemClickListener;
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
mOnItemClickListener = onItemClickListener;
}
public interface OnItemClickListener {
void onItemClick(View view, int position, String s);
}
- 最后在Activity或者fragment里面進行如下使用
mAdapter.setOnItemClickListener(new RecyclerViewAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position, String s) {
mAdapter.setPosition(position); //傳遞當(dāng)前的點擊位置
mAdapter.notifyDataSetChanged(); //通知刷新
}
});
最后統(tǒng)一看下效果吧:
最后附上git地址
https://github.com/wuyinlei/ListviewOrRecyclerviewMemoryposition