0

このコードに問題があります:

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 を使用します。

private ListView lv;

今問題は、私はこの配列cdateを持っていてcevent、それらをarrayadapterにリストしたいのですが、arrayadapterは1つのarraylistしか受け入れません。

私は他の関連する質問もたくさん読みましたが、「カスタムアダプターを作成する必要がある」という同じ答えしかありません。しかし、このコードでは、カスタムアダプターで可能ですか? コードは次の内部にあります。

public class calendarview extends Activity {

編集:私はまだ立ち往生しています、私はトレバー-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);

現在、コードは値を与えていません。私は何かが欠けていますか?このクラスに配列を設定する必要があるように感じますが、方法がわかりません。

4

3 に答える 3

0

各種類の 1 つのエントリをカプセル化するオブジェクトを作成する必要があります。このようなもの:

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() を呼び出して表示する表現を取得するためです。または、アダプターをサブクラス化して、より細かく制御することもできます。

于 2013-08-26T17:18:55.150 に答える
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);
    }
于 2013-09-04T06:33:07.623 に答える