adapter 代码,主要是回调解决:
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.HashMap;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import kadacom.com.pad.R;
import kadacom.com.pad.ui.bean.AppGrid;
public class PreFeedActivityAdapter extends RecyclerView.Adapter<ViewHolder> {
public static HashMap<Integer, Boolean> isSelected;
//数据集
public List<AppGrid> mdatas;
public Context context;
private OnItemClickListener mOnItemClickListener;
private int selected = -1;
public PreFeedActivityAdapter(Context context, List<AppGrid> datas) {
super();
this.mdatas = datas;
this.context = context;
init();
}
// public void setSelection(int position) {
// this.selected = position;
// notifyDataSetChanged();
// }
// 初始化 设置所有item都为未选择
public void init() {
isSelected = new HashMap<Integer, Boolean>();
for (int i = 0; i < mdatas.size(); i++) {
isSelected.put(i, false);
}
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.mOnItemClickListener = listener;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_intent_activity, parent, false);
return new VideoViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
if (isSelected.get(position)) {
((VideoViewHolder) holder).frameLayoutBack.setBackgroundColor(context.getResources().getColor(R.color.main_cycle_6));
} else {
((VideoViewHolder) holder).frameLayoutBack.setBackgroundColor(context.getResources().getColor(R.color.white));
}
if (mOnItemClickListener != null) {
((VideoViewHolder) holder).itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnItemClickListener.onItemClick(((VideoViewHolder) holder).itemView, position);
}
});
((VideoViewHolder) holder).itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
mOnItemClickListener.onItemLongClick(((VideoViewHolder) holder).itemView, position);
return false;
}
});
}
}
@Override
public int getItemCount() {
return mdatas.size();
}
public interface OnItemClickListener {
void onItemClick(View view, int positon);
void onItemLongClick(View view, int positon);
}
public class VideoViewHolder extends ViewHolder {
// @BindView(R.id.gridicon)
// ImageView imageView;
@BindView(R.id.gridname)
TextView gridName;
@BindView(R.id.allbackgroud)
LinearLayout frameLayoutBack;
public VideoViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}
private List<AppGrid> selectedData;
activity 实例代码
LinearLayoutManager layoutManager1 = new LinearLayoutManager(preFeedActivity.this);
recyclerViewPre.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
recyclerViewPre.setLayoutManager(layoutManager1);
recyclerViewPre.setHasFixedSize(true);
DBManager dbManager = DBManager.getInstance(this);
List<AppGrid> appGrids = dbManager.queryAppGridList();
datas = new ArrayList<>();
selectedData = new ArrayList<>();
datas = appGrids;
preFeedActivityAdapter = new PreFeedActivityAdapter(preFeedActivity.this, datas);
recyclerViewPre.setAdapter(preFeedActivityAdapter);
preFeedActivityAdapter.setOnItemClickListener(new PreFeedActivityAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, final int position) {
if (!preFeedActivityAdapter.isSelected.get(position)) {
preFeedActivityAdapter.isSelected.put(position, true); // 修改map的值保存状态
preFeedActivityAdapter.notifyItemChanged(position);
selectedData.add(datas.get(position));
} else {
preFeedActivityAdapter.isSelected.put(position, false); // 修改map的值保存状态
preFeedActivityAdapter.notifyItemChanged(position);
selectedData.remove(datas.get(position));
}
// preFeedActivityAdapter.setSelection(positon);
// if ("REPARE_FEED".equals(datas.get(positon).getTarget())) {
// ARouter.getInstance().build("/kedacom/preFeedActivity").navigation();
// } else {
// ARouter.getInstance().build("/kedacom/BarCodeTestActivity").withString("girl", "hello").navigation();
// }
}