Я думаю, что ваша проблема заключается в попытке установить 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
, поэтому вы можете напрямую использовать их для TextView
s)
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