如何在自定义适配器中使用 String[]?
Posted
技术标签:
【中文标题】如何在自定义适配器中使用 String[]?【英文标题】:How to use String[] in custom adapter? 【发布时间】:2021-05-29 02:44:44 【问题描述】:我制作了一个自定义适配器,它应该调用自定义的arraylist java 类,这样它将显示 3 个单独的字符串数组。但是,如果我将 String[] 放在自定义 arraylist java 类中,它将无法与自定义适配器一起使用,因为 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;
非常感谢大家的帮助,谢谢大家
【问题讨论】:
你为什么使用 String [] ,你已经在传递对象的 ArrayList 我已经在我的 Github 项目中解决了一个类似的问题。你可以考虑看看这里 - github.com/masudias/dynamic-recyclerview 这是一个试图解决类似问题的 SO 线程 - ***.com/questions/34569217/… 【参考方案1】:我认为您的问题是尝试将 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
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);
【讨论】:
谢谢,如果我想要一个特定的字符串索引,或者将整个字符串数组放在文本视图中,它确实有效。但是,我希望根据列表视图的每一行,相应地显示字符串数组中的每个项目。如何做到这一点? 非常感谢我被这个问题困扰了一周 :) 真的很感激以上是关于如何在自定义适配器中使用 String[]?的主要内容,如果未能解决你的问题,请参考以下文章
在自定义适配器类中发送服务器请求后,如何更改 Listview 按钮名称?