我正在为公交车站创建应用程序,以便制定计划。为此,我使用自定义列表视图。这是:
class custom_adapter extends ArrayAdapter<String>{
public custom_adapter(Context context, ArrayList<String> horarios) {
super(context, R.layout.costum_listview ,horarios);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater horarioInflater = LayoutInflater.from(getContext());
View costumView = horarioInflater.inflate(R.layout.costum_listview, parent, false);
String singleHorario = getItem(position);
TextView hora = (TextView) costumView.findViewById(R.id.Hora);
TextView nota = (TextView) costumView.findViewById(R.id.Nota);
hora.setText(singleHorario);
nota.setText(" ");
return costumView;
}
}
现在你可以看到我只有2个texViews,&#34; hora&#34;是显示公交车的计时器,&#34; nota&#34;是为了一些笔记,就像有一天公共汽车不会去或类似的东西。我的问题正是在那个&#34; nota&#34; TextView中。我有几十个arrayList传递给这个自定义ListView,所以有几十个和几十个计时器,还有一些我需要记录的计时器和其他我不需要的计时器。那么,我可以为这个自定义ListView设置另一个参数,比如布尔值或其他东西,所以我可以在该代码中执行if / else来对每个自定义。为了做到这一点,我需要改变什么?我一直在尝试,但没有成功地做到这一点。
答案 0 :(得分:0)
如何制作一个持有两个值的课程&#39; hora&#39;和&#39; nota&#39;以及,假设,boolean isNotaAvailable()方法。然后在getView()中你只需要做这样的事情:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater horarioInflater = LayoutInflater.from(getContext());
View costumView = horarioInflater.inflate(R.layout.costum_listview, parent, false);
YourClassName singleHorario = getItem(position);
TextView hora = (TextView) costumView.findViewById(R.id.Hora);
TextView nota = (TextView) costumView.findViewById(R.id.Nota);
// set hora text
hora.setText(singleHorario);
// check if nota is available, if true - set nota text
if(singleHorario.isNotaAvailable()) {
nota.setText(singleHorario.getNota())}
else nota.setVisibility(View.GONE);
return costumView;
}
这只是一个想法,告诉我它是否有帮助:)。
答案 1 :(得分:0)
只需扩展class custom_adapter extends BaseAdapter
,即可定义数据结构。
ArrayList<String> horarios
将ArrayList<Data> horarios
更改为Data
public class Data{
private String hora;
private String nota;
private boolean shouldShowNota;
//write getter and setter here
}
可以是
getView
最后,阅读Data data = getItem(position);
if (data.getShouldShowNota) {
nota.setText(data.getNote);
}
hora.setText(data.getHora);
truncate tail
答案 2 :(得分:0)
不是使用String作为ArrayAdapter的参数,而是创建一个自定义类并使用它 这样,您可以将所需的所有信息传递到适配器中,然后根据需要显示它。
public class custom_adapter extends ArrayAdapter<MyClass>{
public custom_adapter(Context context, ArrayList<MyClass> horarios) {
super(context, R.layout.costum_listview ,horarios);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater horarioInflater = LayoutInflater.from(getContext());
View costumView = horarioInflater.inflate(R.layout.costum_listview, parent, false);
MyClass singleHorario = getItem(position);
TextView hora = (TextView) costumView.findViewById(R.id.Hora);
TextView nota = (TextView) costumView.findViewById(R.id.Nota);
hora.setText(singleHorario.hora);
nota.setText(singleHorario.nota);
return costumView;
}
和新班级
public class MyClass {
public String hora;
public String nota;
}