Не получается получить доступ к функции другого класса

279
01 февраля 2019, 21:30

У меня есть уже несколько вопросов связанных с этой задачей, вот например этот Как заполнить массив числами long которые получаются при выборе checkBox?. Там мне предоставили вопрос с ответом который решил мою проблему, но все-равно есть некоторые сложности в решении моей проблемы. Суть проста, выделить несколько элементов списка, в моем случае это сообщения, и удалить их, или переслать. Все вроде просто, но как всегда возникли сложности. В адаптере списка получаю массив состоящий из id выделенных сообщений, но теперь непонятно как получать этот массив в другом классе. Изначально вообще непонятно как сделать само удаление. Вопрос не по отправке на сервер запроса, а вообще про логику поведения программы - вот выделили мы например 2 сообщения, дальше я думаю сделать видимой кнопку которая будет удалять эти сообщения, но проблема в том что я получаю массив с идентификаторами в адаптере списка, а удалять придется в главном классе, а для этого нужно каким-то образом вытащить из адаптера массив. Вот есть в адаптере функция:

public int[] getChecked() {
        return checked;
    }

которая возвращает массив моих чисел, но я столкнулся с проблемой, когда главный класс не видит этот метод. Вот весь адаптер целиком:

public class ListAdapter extends RecyclerView.Adapter<ListAdapter.SenderHolder> {
    private Integer type;
    private ArrayList<Message> messageList;
    private Context ctx;
    public int[] checked;
    private static final String keyOutboundMessageId = "outbound_message_id";
    private static final String keyIncomingMessageId = "incoming_message_id";
    private static final String keyDraftMessageId = "draft_message_id";
    ListAdapter(ArrayList<Message> messageList, Context ctx, int type) {
        this.messageList = messageList;
        this.ctx = ctx;
        this.type = type;
        checked = new int[messageList.size()];
    }

    @NonNull
    @Override
    public SenderHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_of_rec_m, viewGroup, false);
        return new SenderHolder(itemView);
    }
    @Override
    public void onBindViewHolder(@NonNull final SenderHolder holder, final int position) {
        final Message message = messageList.get(position);
        holder.checkBox.setVisibility(View.GONE);
        holder.deleteBtn.setVisibility(View.GONE);
        boolean attachment = message.isAttachment();
        Integer new_one = message.getNewField();

        if (attachment) {
            holder.attachIV.setVisibility(View.VISIBLE);
        } else {
            holder.attachIV.setVisibility(View.GONE);
        }
        switch (type) {
            case 0:
                holder.tvFrom.setText(message.getSender_name());
                break;
            case 1:
                holder.tvFrom.setText(message.getReceiver_name());
                break;
            case 2:
                holder.tvFrom.setText(message.getReceiver_name());
                break;
        }
        if (new_one == 1 && !TextUtils.isEmpty(message.getSender_name())) {
            holder.tvSubject.setTypeface(null, Typeface.BOLD);
            holder.tvDate.setTypeface(null, Typeface.BOLD);
            holder.tvFrom.setTypeface(null, Typeface.BOLD);
        }
        holder.tvSubject.setText(message.getSubject());

        DateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.getDefault());
        String isoString = message.getDate();
        try {
            Date date = isoFormat.parse(isoString);
            SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy", Locale.getDefault());
            String dateString = dateFormat.format(date);
            holder.tvDate.setText(dateString);
        } catch (ParseException ignored) {
        }
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(ctx, MessageShow.class);
                switch (type) {
                    case 0:
                        intent.putExtra(ListAdapter.class.getSimpleName() + keyOutboundMessageId, message.getId());
                        break;
                    case 1:
                        intent.putExtra(ListAdapter.class.getSimpleName() + keyIncomingMessageId, message.getId());
                        break;
                    case 2:
                        intent.putExtra(ListAdapter.class.getSimpleName() + keyDraftMessageId, message.getId());
                        break;
                }
                ctx.startActivity(intent);
            }
        });

        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                if (message.isCan_delete()) {
                    holder.checkBox.setVisibility(View.VISIBLE);
                    //holder.deleteBtn.setVisibility(View.VISIBLE);
                    holder.attachIV.setVisibility(View.GONE);
                    holder.tvDate.setVisibility(View.GONE);
                }
                holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
                        if (isChecked) {
                            checked[holder.getAdapterPosition()] = message.getId();
                            Toast.makeText(ctx, Arrays.toString(checked), Toast.LENGTH_SHORT).show();
                        }
                    }
                });

                return true;
            }
        });
    }
    public int[] getChecked() {
        return checked;
    }
    @Override
    public int getItemCount() {
        return messageList.size();
    }
    class SenderHolder extends RecyclerView.ViewHolder {
        final TextView tvFrom, tvSubject, tvDate;
        final ImageView attachIV;
        final CheckBox checkBox;
        final Button deleteBtn;
        SenderHolder(View itemView) {
            super(itemView);
            tvFrom = itemView.findViewById(R.id.tv_from);
            tvSubject = itemView.findViewById(R.id.tv_subject);
            tvDate = itemView.findViewById(R.id.tv_date);
            attachIV = itemView.findViewById(R.id.clip);
            checkBox = itemView.findViewById(R.id.check_item);
            deleteBtn = itemView.findViewById(R.id.delete);
        }
    }
}

и теперь мне нужно как-то вытащить отсюда массив, студия предлагает сделать этот метод статичным, чтобы все работало, но тогда метод вообще не может ничего вернуть нормально. В чем может быть проблема при вызове этого метода?

UPDATE

я кажется смог наконец-то сформулировать проблему для себя и соответственно мне проще у всех спросить то что нужно. У меня есть метод в адаптере который возвращает массив выделенных для удаления элементов списка, и мне нужно получить в главном классе этот массив. Для того чтобы нормально вызывался метод, мне студия предложила сделать этот метод в статическим. Логика в том что я хочу при нажатии на кнопку удалять выделенные элементы списка, в моем случае это сообщения. То есть соответственно мне нужно при нажатии на кнопку получить этот массив и послать запрос на сервер. Честно говоря у меня почему-то не получается добавить пока кнопку на экран со списком, но суть я думаю стала ясна. Если все-таки нужен какой-то код то я докину слушатель нажатий на кнопку.

READ ALSO
Обязательно ли всегда проверять на null?

Обязательно ли всегда проверять на null?

Новичок в java и android, учусь по книжке, там дают код без проверок на null, но andorid studio постоянно подсвечивает, что метод может вернуть nullВидел ответы,...

230
Некорректно отображаются символы

Некорректно отображаются символы

Всем привет! Ситуация такая: я сделал jar-файл для selenium (скрипт для автозаполнения), который считывает данные изcsv и записывает эти данные в поля...

253
Android Studio - Ошибка при сборке

Android Studio - Ошибка при сборке

При сборке приложения в Android Studio появляется ошибка такого содержания:

289
Не работает nextLine()

Не работает nextLine()

При выборе 8 кейса не сохраняет результат в переменнуюИ как-то странно считывает (пропускает одну строку, и только тогда текст с клавиатуры)...

230