我制作了一个自定义适配器,它应该调用定制的arraylist java类,这样它将显示3个独立的字符串数组。但是,如果我将String[]放在定制的arraylist java类中,它将无法使用自定义适配器,因为getitem( getArabic )将需要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;
}
}非常感谢你们的帮助谢谢大家
发布于 2021-02-26 19:43:34
我认为您的问题是试图像下面的代码一样将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[]并返回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并使用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类的get()方法现在返回String,因此您可以直接将它们用于TextView)
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),因此可以使用for循环将所有Strings添加到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);https://stackoverflow.com/questions/66390564
复制相似问题