首先是一个筛选的逻辑
我这里面是设置的五种形态店铺和价格都有分升序和降序 我这里是用不同颜色的圆体现的升序降序
/** * 筛选的主要逻辑就是字体变色和imageview的设置 * 首先每个imageview有两个状态 * 二有两个imageview就分为了四个状态 因为设置到筛选的上下 没放矢量图我放的颜色 * 这样就涉及到五中形态的 type * 1.两个都未选中 * 2.Screen_Store_im 选中为上 * 3.Screen_Store_im 选中为下 * 4.Screen_Price_im 选中为下 * 5.Screen_Price_im 选中为下 * 接下来主要就是判断那种形态了 这里就要定义一个标识了 * 这样还要考虑一个问题 就是选中的时候先选中 上还是下 这样设置都可以 只要后期改下参数就可以了 * 首先我是创建了一个标识默认选中的 Screen_Price_im * @param type 三个drawable为三个颜色的圆角图片 */
private void changeView(int type){
if (type==0){
Screen_Store_im.setImageResource(R.drawable.slect);
Screen_Price_im.setImageResource(R.drawable.slect);
Screen_all_tv.setTextColor(Color.RED);
Screen_Store_tv.setTextColor(Color.BLACK);
Screen_Price_tv.setTextColor(Color.BLACK);
}else if(type==1){
Screen_Store_im.setImageResource(R.drawable.slect_no);
Screen_Price_im.setImageResource(R.drawable.slect);
Screen_all_tv.setTextColor(Color.BLACK);
Screen_Store_tv.setTextColor(Color.RED);
Screen_Price_tv.setTextColor(Color.BLACK);
}else if(type==2){
Screen_Store_im.setImageResource(R.drawable.slect_off);
Screen_Price_im.setImageResource(R.drawable.slect);
Screen_all_tv.setTextColor(Color.BLACK);
Screen_Store_tv.setTextColor(Color.RED);
Screen_Price_tv.setTextColor(Color.BLACK);
}else if(type==3){
Screen_Store_im.setImageResource(R.drawable.slect);
Screen_Price_im.setImageResource(R.drawable.slect_no);
Screen_all_tv.setTextColor(Color.BLACK);
Screen_Store_tv.setTextColor(Color.BLACK);
Screen_Price_tv.setTextColor(Color.RED);
}else if (type==4){
Screen_Store_im.setImageResource(R.drawable.slect);
Screen_Price_im.setImageResource(R.drawable.slect_off);
Screen_all_tv.setTextColor(Color.BLACK);
Screen_Store_tv.setTextColor(Color.BLACK);
Screen_Price_tv.setTextColor(Color.RED);
}
}
还有一个问题就是字体选中和未选中时的颜色改变 所以这就引用出了第二个标识 tabFlag由于字体只有两种形态 选中和未选中我这里采用的时把三个textview放入到了一个 Group
mTextGroup=new TextView[]{Screen_all_tv,Screen_Store_tv,Screen_Price_tv};
然后根据传入的下标来切换颜色
/**
* 选中的下标
* @param index
*/
private void changeGroup(int index){
for (int i = 0; i < mTextGroup.length; i++) {
if (mTextGroup[i] != null && i == index) {
mTextGroup[i].setTextColor(Color.RED);
} else {
mTextGroup[i].setTextColor(Color.BLACK);
}
}
}
接下来是选中的具体逻辑 首先是要考虑标识是如何定义的 我们定义的标识又如何区分呢?首先字体选中的话定义三个下标就够了 0 1 2 即 tabFlag 的值
分别对应 全部 店铺 价格 然后又涉及升序和降序 这样的话就得定义 五个 type的值
即: 0 全部 1店铺升序 2店铺降序 3价格升序 4价格降序
逻辑:
选中全部的时候 tabFlag=0 type=0
选中店铺的时候 tabFlag=1 type=1 默认选择升序 再次点击降序 再次点击升序 通过if来判断
选中价格的时候 tabFlag=2 type=3 默认选择升序 再次点击降序 再次点击升序 通过if来判断
changeView(type);
changeGroup(tabFlag);
//全部
mScreen_all.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
type=0;
tabFlag=0;
changeView(type);
changeGroup(tabFlag);
}
});
//商城
mScreen_Store.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tabFlag=1;
if (type==1){
type=2;
}else if (type==2){
type=1;
}else{
type=1;
}
changeView(type);
changeGroup(tabFlag);
}
});
//价格
mScreen_Price.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tabFlag=2;
if (type==3){
type=4;
}else if (type==4){
type=3;
}else{
type=3;
}
changeView(type);
changeGroup(tabFlag);
}
});
到这里筛选的逻辑就结束了,可以根据自己的需要进行数据的网络请求,和自己扩展
下面来介绍一下recyview选中和取消选中的逻辑
/** * android 选中业务分析 * 第一步首先是需要点击事件这样就用到了接口回调 * 第二步是要确定传入的是哪个下标然后根据下标判断选中的是哪个item * 第三步是要判断选中后如何取消选中 我这里处理的是在实体类里面定义了一个标识 首先定义了一个false 然后切换完判断是true 就更改为false 如果为false 就更改为true 这样就基本完事了 */
直接上代码
这段代码定义了一些基本参数和接口回调
private Context mContext;
private ArrayList<mData> mList;
private int selectPosition = -1;
private OnItemListener onItemListener;
public void setOnItemListener(OnItemListener onItemListener) {
this.onItemListener = onItemListener;
}
public interface OnItemListener {
void onClick(View v, int pos, String s);
}
public void setSelectPosition(int position) {
this.selectPosition = position;
notifyDataSetChanged();
}
然后在 onBindViewHolder 里面做具体逻辑操作
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {
ViewHolder holder1 = (ViewHolder) holder;
holder1.screen_text.setText(mList.get(position).content);
holder1.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v!=null){
onItemListener.onClick(v, position, mList.get(position).content);
}
}
});
if (selectPosition != -1) {
if (selectPosition == position) {
if (mList.get(position).isSelect) {
holder1.screen_text.setBackgroundResource(R.drawable.screen_selted);
} else {
holder1.screen_text.setBackgroundResource(R.drawable.screen_unselted);
}
} else {
holder1.screen_text.setBackgroundResource(R.drawable.screen_unselted);
mList.get(position).isSelect=false;
}
} else {
mList.get(position).isSelect=false;
holder1.screen_text.setBackgroundResource(R.drawable.screen_unselted);
}
}
然后就是如何使用了
screenRcyOneAdpter.setOnItemListener(new ScreenRcyOneAdpter.OnItemListener() {
@Override
public void onClick(View v, int pos, String s) {
screenRcyOneAdpter.setSelectPosition(pos);
if (mData.get(pos).isSelect){
mData.get(pos).isSelect=false;
screenRcyOneAdpter.notifyDataSetChanged();
}else{
mData.get(pos).isSelect=true;
screenRcyOneAdpter.notifyDataSetChanged();
}
}
});
到这里就结束了