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

Как использовать String[] в пользовательском адаптере?

Я делаю собственный адаптер, который должен вызывать собственный класс java arraylist, чтобы он отображал 3 отдельных массива строк. Однако, если я помещу String [] в пользовательский класс java arraylist, он не будет работать с пользовательским адаптером, так как для getitem (position) потребуется тип int для getArabic. Итак, как мне это сделать?

вот мой пользовательский массив java

public class Perrow {

    String[] Arabic;
    String[] transliteration;
    String[] translation;

    public Perrow(String[] arabic, String[] transliteration, String[] translation) {
        Arabic = arabic;
        this.transliteration = transliteration;
        this.translation = translation;
    }

    public String[] getArabic() {
        return Arabic;
    }

    public void setArabic(String[] arabic) {
        Arabic = arabic;
    }

    public String[] getTransliteration() {
        return transliteration;
    }

    public void setTransliteration(String[] transliteration) {
        this.transliteration = transliteration;
    }

    public String[] getTranslation() {
        return translation;
    }

    public void setTranslation(String[] translation) {
        this.translation = translation;
    }
}

и мой пользовательский адаптер


public class PerrowAdapter extends ArrayAdapter<Perrow> {

    private Context mContext;
    private int mResource;



    public PerrowAdapter(@NonNull Context context, int resource, @NonNull ArrayList<Perrow> objects) {
        super(context, resource, objects);
        this.mContext = context;
        this.mResource = resource;

    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        LayoutInflater layoutInflater = LayoutInflater.from(mContext);
        convertView = layoutInflater.inflate(mResource, parent, false);

        TextView arabictext = convertView.findViewById(R.id.arabictext);
        TextView transliteration = convertView.findViewById(R.id.transliteration);
        TextView translation = convertView.findViewById(R.id.translation);

        String[] arabica = getContext().getResources().getStringArray(R.array.fontsize);

        arabictext.setText(getItem(position).getArabic(arabica));
        transliteration.setText(getItem(position).getTransliteration());
        translation.setText(getItem(position).getTranslation());












        return convertView;
    }
}

очень ценю помощь спасибо всем


  • Почему вы используете String [] , вы уже передаете ArrayList объекта 26.02.2021
  • Я решил аналогичную проблему здесь, в моем проекте Github. Вы можете посмотреть здесь - github.com/masudias/dynamic-recyclerview Вот ТАК поток, который пытается решить аналогичную проблему - stackoverflow.com/questions/34569217/ 26.02.2021

Ответы:


1

Я думаю, что ваша проблема заключается в попытке установить array как текст в TextView, как показано ниже.

arabictext.setText(getItem(position).getArabic(arabica));
transliteration.setText(getItem(position).getTransliteration());
translation.setText(getItem(position).getTranslation());

Если вы хотите получить строку для определенного индекса, вы можете просто использовать его index. Например:

arabictext.setText(getItem(position).getArabic()[0]);
transliteration.setText(getItem(position).getTransliteration()[0]);
translation.setText(getItem(position).getTranslation()[0]);

Или, если вы хотите получить все значения из String[] как одно String и установить его на свой TextView, вы можете создать метод, который получает String[] и возвращает String.

private String getString(String[] array){
    String text = "";
    for (String s : array) {
        text += s + ", ";
    }
    return text;
}

Итак, внутри вашего адаптера определите метод, как указано выше, и всякий раз, когда вам нужен String из String[], используйте этот метод.

public class PerrowAdapter extends ArrayAdapter<Perrow> {

    private Context mContext;
    private int mResource;
    private ArrayList<Perrow> objects;

    public PerrowAdapter(@NonNull Context context, int resource, @NonNull ArrayList<Perrow> objects) {
        super(context, resource, objects);
        this.mContext = context;
        this.mResource = resource;
        this.objects = objects;
    }

    private String getString(String[] array){
        String text = "";
        for (String s : array) {
            text += s + ", ";
        }
        return text;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        LayoutInflater layoutInflater = LayoutInflater.from(mContext);
        convertView = layoutInflater.inflate(mResource, parent, false);

        TextView tvArabic = convertView.findViewById(R.id.arabictext);
        TextView tvTransliteration = convertView.findViewById(R.id.transliteration);
        TextView tvTranslation = convertView.findViewById(R.id.translation);

        Perrow perrow = objects.get(position);
        String[] arabica = perrow.getArabic();
        String[] transliteration = perrow.getTransliteration();
        String[] translation = perrow.getTranslation();

        tvArabic.setText(getString(arabica));
        tvTransliteration.setText(getString(transliteration));
        tvTranslation.setText(getString(translation));

        return convertView;
    }
}

ИЗМЕНИТЬ

я хочу, чтобы в строке списка отображался каждый элемент в массиве строк, › соответственно. как этого можно добиться?

Вы должны изменить свой класс Perrow и вместо String[] использовать String и заполнить свой ArrayList каждым элементом String[].

Perrow.java (используйте String вместо String[])

public class Perrow {
    String Arabic;
    String transliteration;
    String translation;

    public Perrow(String arabic, String transliteration, String translation) {
        Arabic = arabic;
        this.transliteration = transliteration;
        this.translation = translation;
    }

    public String getArabic() {
        return Arabic;
    }

    public void setArabic(String arabic) {
        Arabic = arabic;
    }

    public String getTransliteration() {
        return transliteration;
    }

    public void setTransliteration(String transliteration) {
        this.transliteration = transliteration;
    }

    public String getTranslation() {
        return translation;
    }

    public void setTranslation(String translation) {
        this.translation = translation;
    }
}

PerrowAdapter.java (методы get() из класса Perrow теперь возвращают String, поэтому вы можете напрямую использовать их для TextViews)

public class PerrowAdapter extends ArrayAdapter<Perrow> {

    private Context mContext;
    private int mResource;
    private ArrayList<Perrow> objects

    public PerrowAdapter(@NonNull Context context, int resource, @NonNull ArrayList<Perrow> objects) {
        super(context, resource, objects);
        this.mContext = context;
        this.mResource = resource;
        this.objects = objects;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        LayoutInflater layoutInflater = LayoutInflater.from(mContext);
        convertView = layoutInflater.inflate(mResource, parent, false);

        TextView tvArabic = convertView.findViewById(R.id.arabictext);
        TextView tvTransliteration = convertView.findViewById(R.id.transliteration);
        TextView tvTranslation = convertView.findViewById(R.id.translation);

        Perrow perrow = objects.get(position);

        tvArabic.setText(perrow.getArabic());
        tvTransliteration.setText(perrow.getTransliteration());
        tvTranslation.setText(perrow.getTranslation());

        return convertView;
    }
}

Я не знаю, как вы заполняете свой String[], но я предполагаю, что все три String[] имеют одинаковую длину (массивы содержат одинаковый номер Strings), поэтому вы можете добавить все Strings в ArrayList с помощью цикла for и использовать этот ArrayList для вашего адаптера.

Ваша активность (куда вы звоните PerrowAdapter)

String[] arabica = getContext().getResources().getStringArray(R.array.fontsize);
String[] trasliteration = ... //Get your trasliteration array
String[] translation = ... //Get your translation array

ArrayList<Perrow> list = new ArrayList<>();
for(int i = 0; i < arabica.length; i++){
    list.add(new Perrow(arabica[i], transliteration[i], translation[i]));
}

PerrowAdapter adapter = new PerrowAdapter(context, resource, list);
26.02.2021
  • Спасибо, это работает, если я хочу указать определенный индекс строки или поместить весь массив строк в текстовое представление. Но я хочу, чтобы в строке списка отображался каждый элемент в массиве строк соответственно. как этого можно добиться? 27.02.2021
  • отредактировал мой ответ 27.02.2021
  • БОЛЬШОЕ СПАСИБО, Я ЗАСТРЯЛСЯ В ЭТОЙ ПРОБЛЕМЕ НА НЕДЕЛЮ :) очень ценю это 27.02.2021
  • Новые материалы

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

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

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

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

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

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

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