在数组适配器的列表视图中查看2个或更多数组?

时间:2013-08-26 17:03:12

标签: android arrays listview android-listview

我对此代码有疑问:

public void calendarview()
{
    lv = (ListView) findViewById(R.id.calendarlist);

    SharedPreferences pref = getApplicationContext().getSharedPreferences(
            "animobile", MODE_PRIVATE);

    int size = pref.getInt("clength", 0);
    String cdate[] = new String[size];
    String cevent[] = new String[size];
    for(int i=0;i<size;i++){
        cdate[i] = pref.getString("cdate" + i, null);
        cevent[i] = pref.getString("cdate" + i, null);
    }

    Log.w("athan","kalendaryo"+size);

    ArrayAdapter<String> arrayAdapter =      
    new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, cdate);
    lv.setAdapter(arrayAdapter); 

}

将lv作为listview,如下所示:

private ListView lv;

现在的问题是,我有这个数组cdatecevent,我想让它们列在arrayadapter上,但是arrayadapter只接受一个arraylist。

我也阅读了很多其他相关的问题,但我最后得到了相同的答案,“你必须制作一个自定义适配器”。但使用此代码,是否可以使用自定义适配器?代码在:

public class calendarview extends Activity {

编辑: 即时通讯仍然卡住,我创建了一个类似trevor-e的课程,这是代码:

class Event {
    private String cdate;
    private String cevent;
    public Event(String date, String event) {
        this.cdate = date; this.cevent = event;
    }

    public void setcdate(String cdate) {
        this.cdate = cdate;
    }
    public void setcevent(String cevent) {
        this.cevent = cevent;
    }
    public String cevent() {
        return cevent;
    }
    public String cdate() {
        return cdate;
    }
    //getters and setters
}

并将ArrayAdapter更改为:

ArrayAdapter<Event> arrayAdapter =      
    new ArrayAdapter<Event>(this,android.R.layout.simple_list_item_1);

现在代码没有给出任何值。我错过了什么?感觉就像我必须将数组设置为这个类,但我不知道如何。

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您应该创建一个对象来封装每种类型的一个条目。像这样:

class Event {
    private String date;
    private String event;
    public Event(String date, String event) {
        this.date = date; this.event = event;
    }
    //getters and setters
}

然后构造用于适配器的那些对象的ArrayList。所以在这种情况下,它将是ArrayAdapter<Event>

编辑:正如TenFour04在评论中所说,覆盖事件的toString()方法也是明智的,因为默认情况下,适配器将在每个条目上调用toString()以获取要显示的表示。或者您可以选择子类化适配器以获得更好的控制。

答案 2 :(得分:0)

因为我无法理解这个arrayadapter,所以我改用了表:

    TableLayout tl = (TableLayout) findViewById(R.id.calendarlist);
    SharedPreferences pref = getApplicationContext().getSharedPreferences(
            "animobile", MODE_PRIVATE);
    int size = pref.getInt("clength", 0);
    for(int i=0;i<size;i++){
        TableRow tr = new TableRow(this);
        TextView date = new TextView(this);
        date.setText(pref.getString("cdate" + i, null) + "    ");
        tr.addView(date);

        TextView event = new TextView(this);
        event.setText(pref.getString("cevent" + i, null));
        tr.addView(event);
        tl.addView(tr);
    }