Обновление повторного просмотра при изменении текста Edittext - PullRequest
0 голосов
/ 25 октября 2019

У меня есть Edittext и под ним обзор переработчика. Элемент строки в окне повторного просмотра имеет текстовое представление. Я установил адаптер, и все работает нормально. Я хотел бы поменять каждый элемент в обзоре переработчика с текстом в тексте редактирования, и почему-то он не работает. Я пытался с itemArrayAdapter.notifyDataSetChanged () для метода getListForRv ().

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_fonts, container, false);

    itemList = new ArrayList<FontItem>();

    EditText editText = view.findViewById(R.id.edit_text);
    itemArrayAdapter = new ItemArrayAdapter(R.layout.recyclerview_item, itemList);


    recyclerView = (RecyclerView) view.findViewById(R.id.font_list);

    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(itemArrayAdapter);
    getListForRv(10);

    editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            getListForRv(90);
        }

        @Override
        public void afterTextChanged(Editable s) {
            getListForRv(90);

        }
    });


    return view;
}

private void getListForRv(int k) {
    for (int i = k; i < 1000; i++) {
        itemList.add(new FontItem("Item " + i));
    }
    itemArrayAdapter.notifyDataSetChanged();
}

Ответы [ 3 ]

0 голосов
/ 25 октября 2019

notifyDataSetChanged обновит все itemview, если вы хотите синхронизировать весь текст редактирования

У меня есть два решения:

  1. привязка данных: вы можете использовать ObservableField
  2. Создайте прослушиватель и убедитесь, что все элементы сохраняют прослушиватель. Когда editext был изменен, вызовите прослушиватель, тогда весь просмотр элемента примет изменение
0 голосов
/ 25 октября 2019

Наконец мне удалось решить эту проблему, выполнив следующее, не знаю, является ли это плохой практикой, но работает для меня:

  @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_fonts, container, false);

        itemList = new ArrayList<FontItem>();

        EditText editText = getActivity().findViewById(R.id.edit_text);
        itemArrayAdapter = new ItemArrayAdapter(R.layout.recyclerview_item, itemList);


        recyclerView = (RecyclerView) view.findViewById(R.id.font_list);

        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(itemArrayAdapter);
        getListForRv(10);

        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
                recyclerView.setItemAnimator(new DefaultItemAnimator());
                recyclerView.setAdapter(itemArrayAdapter);
                getListForRv(90);
                itemArrayAdapter.notifyDataSetChanged();
            }

            @Override
            public void afterTextChanged(Editable s) {


            }
        });


        return view;
    }

    private void getListForRv(int k) {
        if (!itemList.isEmpty())
            itemList.clear();
        for (int i = k; i < 1000; i++) {
            itemList.add(new FontItem("Item " + i));
        }
    }
0 голосов
/ 25 октября 2019

позвоните вашему getListForRv() при редактировании текста afterTextChanged метод.

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