0

私は、ハイライトされたイベントを持っている月表示カレンダーアプリを持っています。ListViewを使用してすべてのイベントをリスト形式で表示したいと思います。

このチュートリアルを使用して、アダプターを実装することができました。ただし、月をループして、どの日付が休日であるかを確認し、リストビューに表示するのに問題があります。

コード:

Fragment.java

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    //initialize calendar 
    .....

   //loop through the month to get the events
    for(int i = 0; i < _calendar.getActualMaximum(Calendar.DAY_OF_MONTH); i++){
            if(isHoliday(day, month, year))
            {
                Log.d("Calendar", "Events");
                CalendarEvents events = new CalendarEvents();
                final ArrayList<Event> e = new ArrayList<Event>();
                e.addAll(events.eventDetails(month, day));

                for (int j = 0; j < e.size(); j++)
                {
                   Event event = e.get(i);
                   summary_data = new Summary[]
                    {
                       new Summary("EVENT 1", "Event")
                    };
                } 
            }
        }


       //this code works:
        /*summary_data = new Summary[]
        {
             new Summary("Cloudy", "Cloudy"),
             new Summary("Showers", "Showers"),
             new Summary("Snow", "Snow"),
             new Summary("Storm", "Storm"),
             new Summary("Sunny", "Sunny")
        };*/

        summaryAdapter = new SummaryAdapter(this.getActivity().getApplicationContext(), R.layout.listview_item_row, summary_data);

        calendarSummary = (ListView) v.findViewById(R.id.calendarSummary);
        calendarSummary.setAdapter(summaryAdapter);
}

SummaryAdapter.java:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    SummaryHolder holder = null;

    if(row == null)
    {

        row = mInflater.inflate(layoutResourceId, parent, false);

        holder = new SummaryHolder();
        holder.summaryDate = (TextView)row.findViewById(R.id.summaryDate);
        holder.summaryDetail = (TextView)row.findViewById(R.id.summaryDetail);

        row.setTag(holder);
    }
    else
    {
        holder = (SummaryHolder)row.getTag();
    }

    Summary summary = data[position];
    holder.summaryDate.setText(summary.summaryDate); //throws NullPointerException
    holder.summaryDetail.setText(summary.summaryDetail);

    return row;
}

それでholder.summaryDate.setText(summary.summaryDate);スローしNullPointerExceptionます。

どこが間違っているのですか?

4

2 に答える 2

1

デバッグしましたか?ブレークポイントを追加して、すべての変数が初期化されているかどうかを再確認してください。変数「data」に直接移動し、値があるかどうかを確認します。

于 2012-09-17T13:26:42.263 に答える
0

検証をに設定します

 if(data != null) {
    Summary summary = data[position];
 }

これらのエラーは、リストビューの作成中にスローされる可能性があります。

于 2012-09-17T13:21:54.893 に答える