Как управлять массивом строк в методе onBindViewHolder? - PullRequest
0 голосов
/ 16 июня 2020

У меня есть приложение для ресторана, и я хочу создать меню продуктов в виде recyclerview, содержащего в каждой карточке изображение, имя, ингредиенты, цену и другие кнопки. У меня проблема с построением массива строк ингредиентов, так как я хочу добавить их на основе моих данных Firebase для каждого продукта. Это мой класс продукта:

public class MenuObject {
private String image, name, quantity,  price;
private int increment, decrement, button;
private String[] ingredients;

public MenuObject(){}

public MenuObject(String image, String name, String[] ingredients, String price, int increment, String quantity, int decrement, int button){
    this.image = image;
    this.name = name;
    this.ingredients = ingredients;
    this.price = price;
    this.increment = increment;
    this.quantity = quantity;
    this.decrement = decrement;
    this.button = button;
}

public String getImage() {
    return image;
}
public void setImage(String image) {
    this.image = image;
}

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

public String[] getIngredients() {
    return ingredients;
}
public void setIngredients(String[] ingredients) {
    this.ingredients = ingredients;
}

public String getPrice() {
    return price;
}
public void setPrice(String price) {
    this.price = price;
}

public String getQuantity() {
    return quantity;
}
public void setQuantity(String quantity) {
    this.quantity = quantity;
}

public int getDecrement() {
    return decrement;
}
public void setDecrement(int decrement) {
    this.decrement = decrement;
}

public int getIncrement() {
    return increment;
}
public void setIncrement(int increment) {
    this.increment = increment;
}

public int getButton() {
    return button;
}
public void setButton(int button) {
    this.button = button;
}

И это строка из метода, которая вызывает у меня проблемы:

holder.ingredients.setText(currentMenuObject.getIngredients());

Однако в моем адаптере отображается сообщение об ошибке:

не найден подходящий метод для setText (String [])
holder.ingredients.setText (currentMenuObject.getIngredients ()); метод TextView.setText (CharSequence) неприменим (несоответствие аргументов; String [] не может быть преобразован в CharSequence) метод TextView.setText (int) неприменим

Я не знаю, как управлять массив строк в моем методе onBindViewHolder или если мне нужно что-то изменить в моем классе.

Ответы [ 2 ]

0 голосов
/ 16 июня 2020

Ваше сообщение об ошибке сообщает вам, что именно не так: setText() ожидает аргумент типа CharSequence (например, String), но вы даете ему String[]. Итак, что вы хотите сделать, это преобразовать свой массив имен ингредиентов в строку, например:

String text = Arrays.toString(currentMenuObject.getIngredients());
holder.ingredients.setText(text); // [ingredient1, ..., ingredientn]

или, что более вероятно, вы хотите сделать это так (API26 +):

String text = String.join(",", currentMenuObject.getIngredients());
holder.ingredients.setText(text); // ingredient1, ..., ingredientn

или с StringBuilder:

StringBuilder builder = new StringBuilder();
for (String ingredient : currentMenuObject.getIngredients()) {
    builder.append(ingredient).append(",");
}
if (currentMenuObject.getIngredients().length > 0) {
    builder.deleteCharAt(sb.length() - 1); // remove last comma again
}

String text = builder.toString();
holder.ingredients.setText(text); // ingredient1, ..., ingredientn
0 голосов
/ 16 июня 2020

Вы не можете установить массив строк для метода TextView setText. Вам нужно добавить строки из массива, чтобы создать одну строку. Затем установите его на свой TextView.

Например:

if(currentMenuObject.getIngredients() != null) {
       String str ="";
        StringBuilder str = new StringBuilder();
            for (String s : currentMenuObject.getIngredients()) {
                str.append(",").append(s);
            }

    if (currentMenuObject.getIngredients().length > 0) {
        str.deleteCharAt(0); // remove first comma
    }
        holder.ingredients.setText(str.toString());
}

Это добавит значение массива строк, разделенное запятой (",").

...