自定义ListView - 自定义参数

时间:2015-10-26 15:11:03

标签: java android listview android-listview

我正在为公交车站创建应用程序,以便制定计划。为此,我使用自定义列表视图。这是:

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来对每个自定义。为了做到这一点,我需要改变什么?我一直在尝试,但没有成功地做到这一点。

3 个答案:

答案 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;
}