Nano Hash - криптовалюты, майнинг, программирование

Добавление пользовательской формы к выбранному элементу внутри RecyclerVIew

Как отобразить пользовательскую фигуру в качестве фона за выбранным элементом внутри recyclerview. Я пробовал несколько вещей, но все потерпели неудачу:

activity_main.xml:

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/nav_drawer_recycler_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@drawable/drawer_background"
                android:theme="@style/drawer"></android.support.v7.widget.RecyclerView>

        </LinearLayout>

drawer_background.xml:

 <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/drawable_shape_selected" android:state_checked="true"></item>
    <item android:drawable="@android:color/transparent"></item>
</selector>

drawable_shape_selected.xml:

 <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#FFB74D"></solid>

</shape>

custom_layout.xml: для RecyclerView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:orientation="vertical">

    <TextView
        android:id="@+id/TextViewDisplay"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello" />

</LinearLayout>

Обновлять:

itemView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean b) {
                Toast.makeText(context, "Position " + getAdapterPosition(), Toast.LENGTH_SHORT).show();
            }
        });

Ответы:


1

Измените свой drawer_background.xml вот так

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/drawable_shape_selected"
          android:state_pressed="true" />
    <item android:drawable="@drawable/drawable_shape_selected"
          android:state_focused="true" />
    <item android:drawable="@android:color/transparent" />
</selector>

Также добавьте android:focusableInTouchMode="true" к линейному макету custom_layout.xml.

Это связано с тем, что по умолчанию при прикосновении к представлению он будет щелкать вместо фокуса. Если вы хотите, чтобы представление было сфокусировано и изменяло его фон при нажатии, добавьте это в свое представление, т.е. LinearLayout в xml.

EDIT:focusableInTouchMode делает сенсорный режим просмотра в первый раз отключающим щелчок. Итак, чтобы сделать нажатие кнопки в первый раз, добавьте прослушиватель фокуса в класс Java для кнопки, а onFocuschange добавьте view.performClick(), чтобы сделать кнопку нажатием.

Button button = view.findViewById(R.id.buttonPanel2);
button.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean focus) {
                if(focus){
                   view.performClick();
                }
             }
        });
04.10.2017
  • Спасибо!! А что, если бы я хотел добавить тень за этой фигурой. 04.10.2017
  • Ваш самый долгожданный... тень можно добавить в xml, а также путем создания собственного класса. Проверьте эту ссылку для ответа... stackoverflow.com/questions/26356060/ 04.10.2017
  • Родной брат.!! Этот focusableInTouchMode заблокировал первый щелчок recyclerView, он работает только при втором щелчке. 04.10.2017
  • братан обновил код..проверь сейчас..это должно решить твою проблему :) 04.10.2017
  • добавьте это в свой видхолдер 04.10.2017
  • какая позиция? внутри вашего средства просмотра, где вы инициализируете свою кнопку.. добавьте туда focuslistener.. это будет работать 04.10.2017
  • Каждый раз, когда фокус меняется, он дает две позиции. Первый предыдущий фокус и следующий новый фокус. 04.10.2017
  • Я не думаю, что у вас возникнут проблемы, если вы добавите этот код в конструктор держателя представления. Если это так, используйте getAdapterPosition(), чтобы получить позицию. 04.10.2017
  • Да, я делаю то же самое. Но это дает последнюю позицию, а также новую позицию, поскольку я печатаю в Toast. 04.10.2017
  • но зачем вам position?view.performClick(); позволяет добавить щелчок только по первому щелчку. Также прослушиватель изменения фокуса всегда вызывается два раза.. один раз в фокусе теряется и один раз в фокусе усиливается.. логическое значение должно проверять, получен ли фокус или потерян. Когда вы нажимаете новый элемент отображается последний элемент, потому что он потерял фокус, а новый элемент получил фокус 04.10.2017
  • Отлично, но мне приходится открывать новое действие каждый раз, когда меняется фокус или щелкается текст.... 04.10.2017
  • затем добавьте прослушиватель фокуса в текстовое представление, а не в элементное представление 04.10.2017
  • Bro..RecyclerView теряет фон выбранного элемента, когда ящик закрыт! 06.10.2017
  • Новые материалы

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

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

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

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..