Android 实现对已分组到hashmap中的RecycleViewer项目的单击?

Android 实现对已分组到hashmap中的RecycleViewer项目的单击?,android,Android,我有一个按日期分组的列表,然后发送到适配器,以便组装布局。 清单代码: agendamentoVos = (ArrayList<AgendamentoVo>) ((RetornoFilaAtendimento) asyncTaskResult.getResult()).getRetorno(); HashMap<Date, List<AgendamentoVo>> groupedHashMap = groupDataIntoHashMa

我有一个按日期分组的列表,然后发送到适配器,以便组装布局。 清单代码:

agendamentoVos = (ArrayList<AgendamentoVo>) ((RetornoFilaAtendimento) asyncTaskResult.getResult()).getRetorno();
            HashMap<Date, List<AgendamentoVo>> groupedHashMap = groupDataIntoHashMap(agendamentoVos);

            for (Date date : groupedHashMap.keySet()) {
                DateItem dateItem = new DateItem();
                String date1 = "";
                try {
                    date1 = UtilDateFormat.formatDateToStringAnoMesDia(date);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                dateItem.setDate(date1);
                listItem.add(dateItem);

                for (AgendamentoVo pojoOfJsonArray : groupedHashMap.get(date)) {
                    GeneralItem generalItem = new GeneralItem();
                    generalItem.setAgendamentoVoGeneral(pojoOfJsonArray);//setBookingDataTabs(bookingDataTabs);
                    listItem.add(generalItem);
                }
            }
at br.com.sisteplan.evida.atendimento.activities.FilaActivity.itemclick(FilaActivity.java:310)
                                                                                    at br.com.sisteplan.evida.atendimento.activities.FilaActivity.access$500(FilaActivity.java:46)
                                                                                    at br.com.sisteplan.evida.atendimento.activities.FilaActivity$4.onItemClick(FilaActivity.java:291)
                                                                                    at br.com.sisteplan.evida.atendimento.adapters.CustomRecyclerViewAdapterFila$1.onClick(CustomRecyclerViewAdapterFila.java:110)
在适配器中,按下图所示安装分组布局:

at br.com.sisteplan.evida.atendimento.activities.FilaActivity.itemclick(FilaActivity.java:310)
                                                                                    at br.com.sisteplan.evida.atendimento.activities.FilaActivity.access$500(FilaActivity.java:46)
                                                                                    at br.com.sisteplan.evida.atendimento.activities.FilaActivity$4.onItemClick(FilaActivity.java:291)
                                                                                    at br.com.sisteplan.evida.atendimento.adapters.CustomRecyclerViewAdapterFila$1.onClick(CustomRecyclerViewAdapterFila.java:110)

at br.com.sisteplan.evida.atendimento.activities.FilaActivity.itemclick(FilaActivity.java:310)
                                                                                    at br.com.sisteplan.evida.atendimento.activities.FilaActivity.access$500(FilaActivity.java:46)
                                                                                    at br.com.sisteplan.evida.atendimento.activities.FilaActivity$4.onItemClick(FilaActivity.java:291)
                                                                                    at br.com.sisteplan.evida.atendimento.adapters.CustomRecyclerViewAdapterFila$1.onClick(CustomRecyclerViewAdapterFila.java:110)
然后,适配器阵列的大小为5,卡位于位置1、2和4。然后,对于单击,断开,例如,如果单击第三张卡,即位置4

at br.com.sisteplan.evida.atendimento.activities.FilaActivity.itemclick(FilaActivity.java:310)
                                                                                    at br.com.sisteplan.evida.atendimento.activities.FilaActivity.access$500(FilaActivity.java:46)
                                                                                    at br.com.sisteplan.evida.atendimento.activities.FilaActivity$4.onItemClick(FilaActivity.java:291)
                                                                                    at br.com.sisteplan.evida.atendimento.adapters.CustomRecyclerViewAdapterFila$1.onClick(CustomRecyclerViewAdapterFila.java:110)
错误:

at br.com.sisteplan.evida.atendimento.activities.FilaActivity.itemclick(FilaActivity.java:310)
                                                                                    at br.com.sisteplan.evida.atendimento.activities.FilaActivity.access$500(FilaActivity.java:46)
                                                                                    at br.com.sisteplan.evida.atendimento.activities.FilaActivity$4.onItemClick(FilaActivity.java:291)
                                                                                    at br.com.sisteplan.evida.atendimento.adapters.CustomRecyclerViewAdapterFila$1.onClick(CustomRecyclerViewAdapterFila.java:110)
适配器:

at br.com.sisteplan.evida.atendimento.activities.FilaActivity.itemclick(FilaActivity.java:310)
                                                                                    at br.com.sisteplan.evida.atendimento.activities.FilaActivity.access$500(FilaActivity.java:46)
                                                                                    at br.com.sisteplan.evida.atendimento.activities.FilaActivity$4.onItemClick(FilaActivity.java:291)
                                                                                    at br.com.sisteplan.evida.atendimento.adapters.CustomRecyclerViewAdapterFila$1.onClick(CustomRecyclerViewAdapterFila.java:110)
private CustomItemClickListener listener;
@NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(
            @NonNull ViewGroup parent, int viewType) {

        RecyclerView.ViewHolder viewHolder = null;
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());

        switch (viewType) {

            case ListItem.TYPE_GENERAL:
                View v1 = inflater.inflate(R.layout.cell_item_fila, parent,
                        false);
                viewHolder = new GeneralViewHolder(v1);
                break;

            case ListItem.TYPE_DATE:
                View v2 = inflater.inflate(R.layout.cell_item_date_fila, parent, false);
                viewHolder = new DateViewHolder(v2);
                break;

        }

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) {

        switch (viewHolder.getItemViewType()) {

            case ListItem.TYPE_GENERAL:
                final GeneralItem generalItem = (GeneralItem) mDataset.get(position);
                final GeneralViewHolder generalViewHolder= (GeneralViewHolder) viewHolder;
                generalViewHolder.txtTitle.setText(generalItem.getAgendamentoVoGeneral().getPaciente().getNmPaciente());
                generalViewHolder.linearLayoutCard.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    listener.onItemClick(view, generalViewHolder.getAdapterPosition());
                }
            });
                break;

            case ListItem.TYPE_DATE:

                DateItem dateItem = (DateItem) mDataset.get(position);
                DateViewHolder dateViewHolder = (DateViewHolder) viewHolder;
                dateViewHolder.txtTitle.setText(dateItem.getDate());
                // Populate date item data here
                break;
        }
    }
项目点击:

at br.com.sisteplan.evida.atendimento.activities.FilaActivity.itemclick(FilaActivity.java:310)
                                                                                    at br.com.sisteplan.evida.atendimento.activities.FilaActivity.access$500(FilaActivity.java:46)
                                                                                    at br.com.sisteplan.evida.atendimento.activities.FilaActivity$4.onItemClick(FilaActivity.java:291)
                                                                                    at br.com.sisteplan.evida.atendimento.adapters.CustomRecyclerViewAdapterFila$1.onClick(CustomRecyclerViewAdapterFila.java:110)
private void itemclick(int position) {
    Intent it = new Intent(this, AtendimentoPacienteActivity.class);
    Bundle bundle = new Bundle();
    //CRASH CRASH!!!
    pacienteVo = agendamentoVos.get(position).getPaciente(); //CRASH CRASH!!!
    consultaVo.setDtInicio(UtilDateFormat.dataCorrente());
    consultaVo.setAgendamento(agendamentoVos.get(position));
    bundle.putSerializable(getString(R.string.argument_paciente), pacienteVo);
    bundle.putSerializable(getString(R.string.consulta_bundle), consultaVo);
    it.putExtras(bundle);
    startActivity(it);
}
如何实现单击项?
感谢

因为您的项目列表很复杂,所以很难处理基于位置的单击,但是您可以始终使用视图设置标记,并且在onClick方法中,您可以使用getTag()方法获取项目,并对项目执行所需的操作

at br.com.sisteplan.evida.atendimento.activities.FilaActivity.itemclick(FilaActivity.java:310)
                                                                                    at br.com.sisteplan.evida.atendimento.activities.FilaActivity.access$500(FilaActivity.java:46)
                                                                                    at br.com.sisteplan.evida.atendimento.activities.FilaActivity$4.onItemClick(FilaActivity.java:291)
                                                                                    at br.com.sisteplan.evida.atendimento.adapters.CustomRecyclerViewAdapterFila$1.onClick(CustomRecyclerViewAdapterFila.java:110)
generalViewHolder.linearLayoutCard.setTag(generalItem);
generalViewHolder.linearLayoutCard.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    listener.onItemClick(view,(GeneralItem)v.getTag());
                }
            });
定义:

at br.com.sisteplan.evida.atendimento.activities.FilaActivity.itemclick(FilaActivity.java:310)
                                                                                    at br.com.sisteplan.evida.atendimento.activities.FilaActivity.access$500(FilaActivity.java:46)
                                                                                    at br.com.sisteplan.evida.atendimento.activities.FilaActivity$4.onItemClick(FilaActivity.java:291)
                                                                                    at br.com.sisteplan.evida.atendimento.adapters.CustomRecyclerViewAdapterFila$1.onClick(CustomRecyclerViewAdapterFila.java:110)
private void onItemClick(View v, GeneralItem generalItem) {
    //do your handling based on generalItem object
}
或者,您也可以将列表中项目的实际位置设置为标记值,而不是完整项目

at br.com.sisteplan.evida.atendimento.activities.FilaActivity.itemclick(FilaActivity.java:310)
                                                                                    at br.com.sisteplan.evida.atendimento.activities.FilaActivity.access$500(FilaActivity.java:46)
                                                                                    at br.com.sisteplan.evida.atendimento.activities.FilaActivity$4.onItemClick(FilaActivity.java:291)
                                                                                    at br.com.sisteplan.evida.atendimento.adapters.CustomRecyclerViewAdapterFila$1.onClick(CustomRecyclerViewAdapterFila.java:110)