Многократный взгляд переработчика и адаптеры - PullRequest
0 голосов
/ 28 апреля 2018

На самом деле я собираюсь задать несколько вопросов здесь. Не забаните меня, пожалуйста, просто прочитайте полную историю. Давай начнем. Поэтому мне нужно создать действие или фрагмент (это не имеет значения) с частями (представлениями) внутри (сверху и снизу). Внутри нижней части динамически загружаются кнопки (иногда 2, иногда 30), на них есть прослушиватель щелчков. Когда пользователь нажимает кнопку, кнопка появляется в верхней части (вид) и исчезает в нижней части. Кнопки в верхнем представлении также имеют прослушиватель щелчков, и если пользователь нажимает кнопку, он появляется в нижнем представлении и исчезает в верхнем. Так что это задача. Я думал, как это реализовать. Самое простое решение, которое я создал: два вида - это виды переработчика с двумя адаптерами. Мм, наверное, это не лучшее решение, я в этом уверен. Я мог бы реализовать два адаптера, но я не могу реализовать прослушиватель щелчков для моего второго адаптера. Это не работает !? Мне не нравится этот способ по двум причинам: 1. оба адаптера одинаковы; 2. Я не могу использовать клик-адаптер для второго адаптера. Ниже вы можете найти мой код. Мой адаптер - стандартный адаптер:

    public class KeyboardAdapter extends RecyclerView.Adapter<KeyboardAdapter.KeyboardAdapterViewHolder> {
    private List<String> values;

    /*
     * An on-click handler that we've defined to make it easy for an Activity to interface with
     * our RecyclerView
     */
    private final KeyboardAdapterOnClickHandler mClickHandler;

    /**
     * The interface that receives onClick messages.
     */
    public interface KeyboardAdapterOnClickHandler {
        void onClick(int position, String nameClicked);
    }

    /**
     * Creates a SourceAdapter.
     *
     * @param clickHandler The on-click handler for this adapter. This single handler is called
     *                     when an item is clicked.
     */
    public KeyboardAdapter(List<String> myDataset, KeyboardAdapterOnClickHandler clickHandler) {
        values = myDataset;
        mClickHandler = clickHandler;
    }

    /**
     * Cache of the children views for a forecast list item.
     */
    public class KeyboardAdapterViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        // each data item is just a string in this case
        private Button btnValue;
        private String mName;
        public View layout;
        private int parentId;

        private KeyboardAdapterViewHolder(View view) {
            super(view);
            //layout = view;
            btnValue = view.findViewById(R.id.btn);

            //parentId = ((View) btnValue.getParent()).getId();

            // Call setOnClickListener on the view passed into the constructor (use 'this' as the OnClickListener)
            view.setOnClickListener(this);
        }

        public void setData(String name) {
            mName = name;
            btnValue.setText(mName);
        }

        @Override
        public void onClick(View view) {
            int adapterPosition = getAdapterPosition();
            mClickHandler.onClick(adapterPosition, mName);
        }
    }

    @Override
    public long getItemId(int position) {
        return super.getItemId(position);
    }

    @Override
    @NonNull
    public KeyboardAdapterViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_layout, parent, false);
        return new KeyboardAdapterViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull KeyboardAdapterViewHolder viewHolder, final int position) {
        viewHolder.setData(values.get(position));
    }

    @Override
    public int getItemCount() {
        return values.size();
    }

    @Override
    public int getItemViewType(int position) {
        return 0;
    }

    public void remove(int position) {
        values.remove(position);
        notifyItemRemoved(position);
        notifyItemRangeChanged(position, values.size());
    }
}

MainActivity:

protected void onCreate(Bundle savedInstanceState) {
        ...

    String s = "test it";

    mAdapter = new KeyboardAdapter(virtualKeyboardInit(s), MainActivity.this);

    recyclerView1.setAdapter(mAdapter);

    // empty list just to init rv
    answerList = new ArrayList<>(); 

    mAdapter1 = new KeyboardAdapter1(answerList, MainActivity.this); // doesn't work, error message "KeyboardAdapter1.KeyboardAdapterOnClickHandler cannot be applied to MainActivity"

    recyclerView2.setAdapter(mAdapter1);
}

private List<String> virtualKeyboardInit(String s) {
    boolean checkBool = true;

    // convert string to array and then to list
    String [] strArray = s.split("(?!^)");
    stringList = new ArrayList<>(Arrays.asList(strArray));
    // shuffle letters in the list
    long seed = System.nanoTime();
    Collections.shuffle(stringList, new Random(seed));
    // API 24
    // /String[] strArray = Stream.of(cArray).toArray(String[]::new);
    return stringList;
}

@Override
public void onClick(int position, String nameClicked) {
    mAdapter.remove(position);
}

Это всего лишь фрагмент кода. Итак, что я могу сделать в этом случае? Спасибо за внимание и помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...