Как определить положение дочернего элемента адаптера раздела, используя вид рециркулятора при прокрутке - PullRequest
0 голосов
/ 12 мая 2018

У меня есть представление переработчика, в котором есть раздел адаптера, который состоит из сообщений чата, и у нас есть идентификаторы для каждого сообщения. При щелчке сообщения мы можем получить идентификаторы сообщений, но мне нужно получить идентификатор конкретного сообщения, которое в данный момент отображается на экране. За один раз пользователю будет видно только одно сообщение, поэтому нам нужно получить идентификатор этого конкретного сообщения, которое присутствует на экране. Ниже скриншот моего приложения.

Снимок экрана

  @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int section, int relativePosition, int absolutePosition) {

        String header1 = header.get(section);

        allData = mArrChildHashMap.get(header1);

        String Message = allData.get(relativePosition).getMessage();
        String MessageId = allData.get(relativePosition).getMessageId();
..................
...................
        String ticketId = allData.get(relativePosition).getTicketId();
        String AcceptFlag = checkNull(allData.get(relativePosition).getTicketAccepted());
        String ExpiryTime = checkNull(allData.get(relativePosition).getExpiryTime());
        ItemViewHolder itemViewHolder = (ItemViewHolder) holder;


            //Ticket
            itemViewHolder.Timer.setVisibility(View.VISIBLE);
            itemViewHolder.ticket.setVisibility(View.VISIBLE);
            itemViewHolder.ticketTitle.setText(Message);
            itemViewHolder.Message.setVisibility(View.GONE);
            setTicketStatus(itemViewHolder , ticketType);


        if(owner.equals("YES")){

            RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
            lp.setMargins(150, 0, 0, 0);
            itemViewHolder.mLayout.setLayoutParams(lp);

            if(messageType.equals("1"))
            {
                itemViewHolder.mLayout.setBackgroundResource(R.drawable.bubble2);
            }else {
                itemViewHolder.mLayout.setBackgroundResource(0);
            }
            lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

           // itemViewHolder.mLayout.setGravity(Gravity.RIGHT);
            itemViewHolder.Tick.setVisibility(View.VISIBLE);
            itemViewHolder.Accept.setVisibility(View.INVISIBLE);
           // itemViewHolder.status.setVisibility(View.VISIBLE);
            if(deliveryFlag.equals("YES")){
           //     itemViewHolder.status.setText("Deliv");
                itemViewHolder.Tick.setBackgroundResource(R.drawable.check);
            }

            itemViewHolder.itemLongClick(Message,section,relativePosition,longClickListener);

        }else{

            RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
            lp.setMargins(0, 0, 150, 0);

            lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);

            itemViewHolder.mLayout.setLayoutParams(lp);
            itemViewHolder.Accept.setVisibility(View.VISIBLE);

            if(messageType.equals("1"))
            {
                itemViewHolder.mLayout.setBackgroundResource(R.drawable.bubble1);
            }else {
                itemViewHolder.mLayout.setBackgroundResource(0);
            }



            itemViewHolder.status.setVisibility(View.GONE);
            itemViewHolder.Tick.setVisibility(View.GONE);
        }
        itemViewHolder.Message.setText(Message);
        itemViewHolder.sampleTime.setText(time);
        itemViewHolder.name.setText(name);
        if(name.equals("")){
            itemViewHolder.name.setVisibility(View.GONE);
        }else {
            itemViewHolder.name.setVisibility(View.VISIBLE);
        }
        if(AcceptFlag.equals("1")){
            itemViewHolder.Accept.setVisibility(View.GONE);
          //  itemViewHolder.Accept.setText("Accepted");
            itemViewHolder.Timer.setVisibility(View.VISIBLE);
        }

        if(!ExpiryTime.equals("0")){
            customRunnable = new CustomRunnable(handler,itemViewHolder.Timer,Long.parseLong(ExpiryTime));
            handler.removeCallbacks(customRunnable);
            customRunnable.holder =  itemViewHolder.Timer;
            customRunnable.millisUntilFinished = Long.parseLong(ExpiryTime); 

    }

        itemViewHolder.itemLongClick(Message,section,relativePosition,longClickListener);
        itemViewHolder.OnAcceptClick(ticketId,section,absolutePosition,onClickListener);
        itemViewHolder.OnTimerClick(ticketId,section,absolutePosition,onClickListener);

    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, boolean header) {
        View v = null;
        if (header)

        {
            v = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.list_item_section1, parent, false);
            return new SectionViewHolder(v);
        } else {
            v = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.list_item_section, parent, false);
            return new ItemViewHolder(v);
        }

    }

Я попробовал приведенный ниже код, чтобы получить идентификатор сообщения при прокрутке

mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);

            overallXScroll = overallXScroll + dx;

            Log.i("check","overall->" + overallXScroll);

        }
    });

Я получаю ниже вывода

05-12 15: 08: 03.451 22694-22694 / com ...... E / check: в целом-> 0 05-12 15: 08: 03.467 22694-22694 / com ...... E / check: в целом-> 0

1 Ответ

0 голосов
/ 12 мая 2018

Попробуйте метод isViewPartiallyVisible из LayoutManager.

В вашем адаптере вы можете получить de LayoutManager из recyclerView, который можно получить из события onAttachedToRecyclerView.

...