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

Настройка макета CustomView на основе пользовательского ввода

У меня есть собственное представление, расширяющее RelativeLayout. В методе init(Context context, AttributeSet attrs) этого класса я устанавливаю файл макета:

inflate(getContext(), R.layout.in_session_view_layout, this);

Я использую это пользовательское представление в элементе списка следующим образом:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:verizon="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_margin="5dp">

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center">

    <ImageView
        android:id="@+id/flag"
        android:layout_width="60dp"
        android:layout_height="160dp"
        android:layout_below="@id/txt"
        android:layout_gravity="center"
        android:layout_margin="5dp" />

</FrameLayout>

    <com.widgets.FreeBeeNotificationView
        android:id="@+id/freebee_pre_session_view"
        android:layout_width="wrap_content"
        android:layout_height="35dp"
        android:layout_gravity="right|top"
        android:layout_marginBottom="6dp"
        android:layout_marginRight="6dp"
        android:layout_marginTop="6dp"
        verizon:textSize="12sp" />

</FrameLayout>

Теперь требование состоит в том, что этот файл макета должен быть установлен в пользовательском представлении динамически на основе пользовательского ввода. Но я получаю пользовательский ввод после того, как метод init() пользовательского представления уже был вызван, поскольку этот метод вызывается, как только загружается приведенный выше FrameLayout.

Как динамически настроить файл макета на пользовательский вид на основе пользовательского ввода? Может ли кто-нибудь помочь мне.

Спасибо.


  • Нужно ли сначала раздувать R.layout.in_session_view_layout, а затем, когда поступает пользовательский ввод, раздувать другой макет, или вам просто нужно раздувать R.layout.in_session_view_layout после поступления пользовательского ввода? 05.04.2016
  • У меня есть 2 вида макета: R.layout.in_session_view_layout_1 и R.layout.in_session_view_layout. Любой из них должен быть раздут в представлении после поступления пользовательского ввода. 05.04.2016

Ответы:


1

Надеюсь, я правильно понял ваше требование. Если нет, пожалуйста, объясните дальше. Ты можешь это сделать.

В вашем пользовательском представлении создайте метод setLayout(int layoutId)

public void setLayout(int layoutId)
{
     removeAllViews();
     LayoutInflater inflater = LayoutInflater.from(getContext());
     inflater.inflate(getContext(), layoutId, this);
}

Когда у вас есть пользовательский ввод, вы звоните

yourCustomView.setLayout(R.layout.new_layout);

Отказ от ответственности: все это из памяти и не тестировалось, поэтому может не скомпилироваться.

05.04.2016
  • Итак, в методе init() я установлю любой файл макета. Затем переопределите предыдущий макет на основе пользовательского ввода; с помощью метода setLayout правильно? 05.04.2016
  • да, removeAllViews удаляет все дочерние представления вашего пользовательского относительного макета, поэтому у вас есть чистая группа просмотра, в которую вы можете добавить новый макет. Обратите внимание, что это должно работать, как и ожидалось, если вы просто используете какой-то статический макет, который не требует сложной логики. Для более сложного сценария вы можете использовать ViewPager или ViewFlipper или что-то другое в зависимости от ваших требований. 05.04.2016
  • Новые материалы

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

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

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

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

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

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

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