思路:循环list数据源, 把每条数据里的flag设置false 点击的设置成true就可以了
增加flag标志:
public class Bean {
public String title;
public boolean flag;
public Bean( String title, boolean flag) {
this.title = title;
this.flag = flag;
}
}
adapter中
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
// holder.button.setText(records.get(position).getTopic());
Log.e("wy", "position: " + position);
holder.button.setText(mDatas.get(position).title);
if (mDatas.get(position).flag) {
holder.ll.setBackground(mContext.getResources().getDrawable(R.drawable.autofitbutton_press));
holder.button.setTextColor(mContext.getResources().getColor(R.color.auto_select));
} else {
holder.ll.setBackground(mContext.getResources().getDrawable(R.drawable.autofitbutton_normal));
holder.button.setTextColor(mContext.getResources().getColor(R.color.auto_select_text_normal));
}
if (mOnItemClickLitener != null) {
holder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos = holder.getLayoutPosition();
mOnItemClickLitener.onItemClick(holder.itemView, pos);
if (selectPos <= mDatas.size()) {
mDatas.get(selectPos).flag = false;
selectPos = position;
}
mDatas.get(position).flag = !mDatas.get(position).flag;
notifyDataSetChanged();
}
});
}
}
全代码
public class RecyclerViewActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private HomeAdapter homeAdapter;
private TextView tvMore;
List<TopicListBean.DataDTO.RecordsDTO> records;
TopicListBean topicListBean;
private ArrayList<Bean> mDatas;
/**
* 数据集合
*/
// private ArrayList<Bean> imgs = new ArrayList<>();
LinearLayoutManager linearLayoutManager;
HorizontalScrollView horizontalScrollView;
private TextView topicTv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recycler_view);
horizontalScrollView= (HorizontalScrollView) findViewById(R.id.hs);
topicTv = (TextView) findViewById(R.id.topic_tv);
mRecyclerView = (RecyclerView) findViewById(R.id.rv);
tvMore = (TextView) findViewById(R.id.tv_more);
mDatas = new ArrayList<>();
for (int i = 'A'; i <= 'C'; i++) {
mDatas.add(new Bean( "name" + i, false));
}
Log.e("wy", "mDatas.size(): "+mDatas.size() );
if(mDatas.size()==0||mDatas==null){
horizontalScrollView.setVisibility(View.GONE);
topicTv.setVisibility(View.GONE);
}else {
horizontalScrollView.setVisibility(View.VISIBLE);
topicTv.setVisibility(View.VISIBLE);
}
// if (mDatas.size() > 5) {
// tvMore.setVisibility(View.VISIBLE);
// } else {
// tvMore.setVisibility(View.VISIBLE);
// }
linearLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);
// linearLayoutManager.setOrientation(linearLayoutManager.HORIZONTAL);
// linearLayoutManager.scrollToPositionWithOffset(0, 0);
mRecyclerView.setLayoutManager(linearLayoutManager);
// homeAdapter = new HomeAdapter(RecyclerViewActivity.this, records);
homeAdapter = new HomeAdapter(RecyclerViewActivity.this, mDatas);
mRecyclerView.setAdapter(homeAdapter);
homeAdapter.setOnItemClickLitener(new HomeAdapter.OnItemClickLitener() {
@Override
public void onItemClick(View view, int position) {
Log.e("wy", "onItemClick: "+position );
}
});
// RequestParams params = new RequestParams("http://10.10.2.65:8072/cr-app/topic/list");
// params.addBodyParameter("currPage", 1);
// params.addBodyParameter("pageSize", 2);
//
// x.http().post(params, new Callback.CommonCallback<String>() {
// @Override
// public void onSuccess(String result) {
// Log.e("wy","result: "+ result);
// topicListBean = JSON.parseObject(result, TopicListBean.class);
// records= topicListBean.getData().getRecords();
// Log.e("wy","result: "+ topicListBean.getData().getRecords().toString());
//
// if (records.size() > 5) {
// tvMore.setVisibility(View.VISIBLE);
// } else {
// tvMore.setVisibility(View.GONE);
// }
//
//
// LinearLayoutManager linearLayoutManager = new LinearLayoutManager(RecyclerViewActivity.this);
// linearLayoutManager.setOrientation(linearLayoutManager.HORIZONTAL);
// mRecyclerView.setLayoutManager(linearLayoutManager);
// homeAdapter = new HomeAdapter(RecyclerViewActivity.this, records);
// mRecyclerView.setAdapter(homeAdapter);
//
// homeAdapter.setOnItemClickLitener(new HomeAdapter.OnItemClickLitener() {
//
// @Override
// public void onItemClick(View view, int position) {
// Toast.makeText(RecyclerViewActivity.this, position + " click",
// Toast.LENGTH_SHORT).show();
// }
//
//
// });
//
// }
//
// @Override
// public void onError(Throwable ex, boolean isOnCallback) {
// Log.e("wy","onError result: "+ ex.getMessage());
// }
//
// @Override
// public void onCancelled(CancelledException cex) {
// Toast.makeText(x.app(), "cancelled", Toast.LENGTH_LONG).show();
// }
//
// @Override
// public void onFinished() {
//
// }
// });
}
}
package com.example.myapplication;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder> {
ArrayList<Bean> mDatas;
Context mContext;
/**
* 用于保存点击的item位置
*/
private int selectPos = 0;
public HomeAdapter(Context mContext, ArrayList<Bean> mDatas) {
this.mContext = mContext;
this.mDatas = mDatas;
}
public interface OnItemClickLitener {
void onItemClick(View view, int position);
}
private OnItemClickLitener mOnItemClickLitener;
public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener) {
this.mOnItemClickLitener = mOnItemClickLitener;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
mContext).inflate(R.layout.item_home, parent,
false));
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
// holder.button.setText(records.get(position).getTopic());
Log.e("wy", "position: " + position);
holder.button.setText(mDatas.get(position).title);
if (mDatas.get(position).flag) {
holder.ll.setBackground(mContext.getResources().getDrawable(R.drawable.autofitbutton_press));
holder.button.setTextColor(mContext.getResources().getColor(R.color.auto_select));
} else {
holder.ll.setBackground(mContext.getResources().getDrawable(R.drawable.autofitbutton_normal));
holder.button.setTextColor(mContext.getResources().getColor(R.color.auto_select_text_normal));
}
if (mOnItemClickLitener != null) {
holder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos = holder.getLayoutPosition();
mOnItemClickLitener.onItemClick(holder.itemView, pos);
if (selectPos <= mDatas.size()) {
mDatas.get(selectPos).flag = false;
selectPos = position;
}
mDatas.get(position).flag = !mDatas.get(position).flag;
notifyDataSetChanged();
}
});
}
}
@Override
public int getItemCount() {
return mDatas.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
LinearLayout ll;
Button button;
TextView tv;
public MyViewHolder(View view) {
super(view);
ll = (LinearLayout) view.findViewById(R.id.ll);
button = (Button) view.findViewById(R.id.id_num);
tv = (TextView) view.findViewById(R.id.tv);
}
}
}
package com.example.myapplication;
public class Bean {
public String title;
public boolean flag;
public Bean( String title, boolean flag) {
this.title = title;
this.flag = flag;
}
}