如何在自定义适配器中使用 String[]?
How to use String[] in custom adapter?
我制作了一个自定义适配器,它应该调用自定义数组列表 java class,这样它将显示 3 个单独的字符串数组。但是,如果我将 String[] 放在自定义数组列表 java class 中,它将不适用于自定义适配器,因为 getitem(position) 需要 getArabic 的 int 类型。那我该怎么做呢?
这是我的自定义数组列表 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;
}
}
非常感谢帮助谢谢大家
我认为您的问题是尝试将 array
设置为 TextView
的文本,如下面的代码。
arabictext.setText(getItem(position).getArabic(arabica));
transliteration.setText(getItem(position).getTransliteration());
translation.setText(getItem(position).getTranslation());
如果你想获取特定索引的字符串,你可以使用它的索引。例如:
arabictext.setText(getItem(position).getArabic()[0]);
transliteration.setText(getItem(position).getTransliteration()[0]);
translation.setText(getItem(position).getTranslation()[0]);
或者如果你想从 String[]
中获取所有值作为一个 String
并将其设置为你的 TextView
你可以创建一个方法来获取 String[]
和returns 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;
}
}
编辑
i want as per row of the listview, show each item in the string array, >accordingly. how can this be achieved ?
您应该更改 Perrow
class 而不是 String[]
使用 String
并使用 String[]
的每个元素填充 ArrayList
.
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(Perrow
class 中的 get()
方法现在 return 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
使用 for
循环进入 ArrayList
并将 ArrayList
用于您的适配器。
你的Activiy(你在哪里调用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);
我制作了一个自定义适配器,它应该调用自定义数组列表 java class,这样它将显示 3 个单独的字符串数组。但是,如果我将 String[] 放在自定义数组列表 java class 中,它将不适用于自定义适配器,因为 getitem(position) 需要 getArabic 的 int 类型。那我该怎么做呢?
这是我的自定义数组列表 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;
}
}
非常感谢帮助谢谢大家
我认为您的问题是尝试将 array
设置为 TextView
的文本,如下面的代码。
arabictext.setText(getItem(position).getArabic(arabica));
transliteration.setText(getItem(position).getTransliteration());
translation.setText(getItem(position).getTranslation());
如果你想获取特定索引的字符串,你可以使用它的索引。例如:
arabictext.setText(getItem(position).getArabic()[0]);
transliteration.setText(getItem(position).getTransliteration()[0]);
translation.setText(getItem(position).getTranslation()[0]);
或者如果你想从 String[]
中获取所有值作为一个 String
并将其设置为你的 TextView
你可以创建一个方法来获取 String[]
和returns 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;
}
}
编辑
i want as per row of the listview, show each item in the string array, >accordingly. how can this be achieved ?
您应该更改 Perrow
class 而不是 String[]
使用 String
并使用 String[]
的每个元素填充 ArrayList
.
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(Perrow
class 中的 get()
方法现在 return 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
使用 for
循环进入 ArrayList
并将 ArrayList
用于您的适配器。
你的Activiy(你在哪里调用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);