【发布时间】:2018-09-13 08:01:43
【问题描述】:
我已查看所有相关链接,但尚未找到任何解决方案。我现在将解释这个问题。我有recyclerview(网格布局),我像往常一样设置了一个点击监听器。但是这个行为异常。在多次点击不同的项目之后。 OnClick 随机运行一到两次。任何帮助将不胜感激。我将在此处发布我的适配器类代码。
public class CurrentLoadNumberListAdapter extends RecyclerView.Adapter<CurrentLoadNumberListAdapter.ListViewHolder> {
private Context context;
private List<CurrentLoadNumberDetail> currentLoadNumberDetailList;
private NIOClient nioClient;
private FragmentManager fragmentManager;
private FragmentActivity myContext;
private Activity activity;
private android.support.v4.app.Fragment fragment;
private SweetAlertDialog sweetAlertDialogProgressBar;
public static int clickedPosition;
public CurrentLoadNumberListAdapter(Context context, List<CurrentLoadNumberDetail> currentLoadNumberDetailList , Activity activity, NIOClient nioClient) {
this.context = context;
this.currentLoadNumberDetailList = currentLoadNumberDetailList;
this.activity = activity;
this.nioClient = nioClient;
}
@NonNull
@Override
public ListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.company_current_load_number_listlayout,null);
//Specifying Activity for Fragment Transaction
activity = activity;
myContext = (FragmentActivity) activity;
//Iniallizing Fragment Manager
fragmentManager = myContext.getSupportFragmentManager();
//Making Sweet Alert progress Bar
sweetAlertDialogProgressBar = new SweetAlertDialog(context,SweetAlertDialog.PROGRESS_TYPE);
sweetAlertDialogProgressBar.getProgressHelper().setBarColor(Color.parseColor("#9ccc65"));
return new CurrentLoadNumberListAdapter.ListViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ListViewHolder holder, final int position) {
holder.loadNumber.setText(currentLoadNumberDetailList.get(position).getLoadNumber());
}
@Override
public int getItemCount() {
return currentLoadNumberDetailList.size();
}
class ListViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private Button loadNumber;
public ListViewHolder(View itemView){
super(itemView);
loadNumber = itemView.findViewById(R.id.current_load_number);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
int ItemPosition = getLayoutPosition();
//nioClient.sendMsg(getMinLoad(currentLoadNumberDetailList.get(position).getIdDeviceLoadRecord())+" \r\n\r\n");
Toast.makeText(context,"On click " + ItemPosition ,Toast.LENGTH_SHORT).show();
}
}
public void updateData(){
currentLoadNumberDetailList.clear();
notifyDataSetChanged();
}
private String getMinLoad(String id){
Gson gson = new Gson();
GetMinLoadRequestModel minLoadRequestModel = new GetMinLoadRequestModel();
minLoadRequestModel.setIdDeviceLoadRecord(id);
minLoadRequestModel.setMessageType("get_min_load_info");
String json = gson.toJson(minLoadRequestModel,GetMinLoadRequestModel.class);
return json;
}
}
请大家看看。谢谢你。
【问题讨论】:
-
您是否尝试过在按钮外部粘贴以查看是否有效。该按钮是一个可点击的视图,并且可能会在事件到达您的视图持有者的 itemview 之前使用它们。
-
我只是将xml属性的可点击属性设置为false。所以当我点击按钮时。在 onClick 中运行 toast 需要花费大量时间。
-
通过点击按钮外部。它什么也没做,我什至做了一个新的干净的适配器。但没有任何变化。@VeselinTodorov
标签: android onclicklistener android-recyclerview