Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java TitleView bug I don';我不明白_Java_Android_Eclipse_Textview - Fatal编程技术网

Java TitleView bug I don';我不明白

Java TitleView bug I don';我不明白,java,android,eclipse,textview,Java,Android,Eclipse,Textview,我正在修一门coursera课程,我真的到了一个地步,我认为我不适合这个领域的工作(开发),应该坚持平面设计。至少我想完成这门课,但我一直有一些不明白的错误!根据logcat,以下行有问题 titleView.setText(toDoItem.getTitle()); 但我看不出有什么问题!下面是完整的程序,如果你需要什么,请告诉我 托多管理实用性 Todolistatadapter package-course.labs.todomanager; 导入java.util.ArrayList;

我正在修一门coursera课程,我真的到了一个地步,我认为我不适合这个领域的工作(开发),应该坚持平面设计。至少我想完成这门课,但我一直有一些不明白的错误!根据
logcat
,以下行有问题

titleView.setText(toDoItem.getTitle());
但我看不出有什么问题!下面是完整的程序,如果你需要什么,请告诉我

托多管理实用性 Todolistatadapter
package-course.labs.todomanager;
导入java.util.ArrayList;
导入java.util.List;
导入android.content.Context;
导入android.os.AsyncTask.Status;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.CheckBox;
导入android.widget.CompoundButton;
导入android.widget.CompoundButton.OnCheckedChangeListener;
导入android.widget.RelativeLayout;
导入android.widget.TextView;
公共类ToDoListAdapter扩展了BaseAdapter{
private final List mItems=new ArrayList();
私有最终上下文mContext;
私有静态最终字符串TAG=“Lab UserInterface”;
公共ToDoListAdapter(上下文){
mContext=上下文;
}
//将ToDoItem添加到适配器
//通知观察者数据集已更改
公共作废添加(ToDoItem项){
增加(项目);
notifyDataSetChanged();
}
//清除所有项目的列表适配器。
公共空间清除(){
明确的;
notifyDataSetChanged();
}
//返回ToDoItems的数目
@凌驾
public int getCount(){
返回mItems.size();
}
//检索ToDoItems的数量
@凌驾
公共对象getItem(int-pos){
返回mItems.get(pos);
}
//获取ToDoItem的ID
//在这种情况下,它只是位置
@凌驾
公共长getItemId(int-pos){
返回pos;
}
//在指定位置为ToDoItem创建视图
//请记住检查convertView是否持有已分配的视图
//在创建新视图之前。
/考虑使用ViWHOWOD模式使滚动更有效。
//见:http://developer.android.com/training/improving-layouts/smooth-scrolling.html
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//TODO-获取当前ToDoItem
最终ToDoItem ToDoItem=(ToDoItem)获取项目(位置);
//待办事项-为此待办事项膨胀视图
//来自todo_item.xml
//RelativeLayout itemLayout=null;
//TODO-填写特定的ToDoItem数据
//请记住,此视图中的数据
//对应于定义的用户界面元素
//在布局文件中
if(convertView==null){
LayoutInflater充气器=(LayoutInflater)mContext.getSystemService(Context.LAYOUT\u充气器\u服务);
convertView=充气机。充气(R.layout.add_todo,null);
}
//TODO-在文本视图中显示标题
final TextView titleView=(TextView)convertView.findViewById(R.id.titleView);
titleView.setText(toDoItem.getTitle());
//TODO-设置状态复选框
最终复选框statusView=(复选框)convertView.findViewById(R.id.statusCheckBox);
statusView.setChecked(toDoItem.getStatus()==course.labs.todomanager.toDoItem.Status.DONE);
statusView.setOnCheckedChangeListener(新的OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,
布尔值(已检查){
Log.i(标记“Entered onCheckedChanged()”);
//TODO-设置OnCheckedChangeListener,它
//当用户切换状态复选框时调用
if(toDoItem.getStatus().equals(course.labs.todomanager.toDoItem.Status.DONE))
{ 
toDoItem.setStatus(course.labs.todomanager.toDoItem.Status.NOTDONE);//更改它
}
其他的
{
toDoItem.setStatus(course.labs.todomanager.toDoItem.Status.DONE);//更改它
}
}
});
//TODO-在文本视图中显示优先级
final TextView priorityView=(TextView)convertView.findViewById(R.id.priorityView);
priorityView.setText(toDoItem.getPriority().toString());
//TODO-显示时间和日期。
//提示-使用ToDoItem.FORMAT.FORMAT(ToDoItem.getDate())获取日期和
//时间串
final TextView dateView=(TextView)convertView.findViewById(R.id.dateView);
dateView.setText(ToDoItem.FORMAT.FORMAT(ToDoItem.getDate());
//返回刚刚创建的视图
返回视图;
}
}
logcat 02-06 13:11:20.711:E/AndroidRuntime(1288):致命异常:主 02-06 13:11:20.711:E/AndroidRuntime(1288):java.lang.NullPointerException 02-06 13:11:20.711:E/AndroidRuntime(1288):at>course.labs.todomanager.ToDoListAdapter.getView(ToDoListAdapter.java:105) 02-06 13:11:20.711:E/AndroidRuntime(1288):在android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:220) 02-06 13:11:20.711:E/AndroidRuntime(1288):在android.widget.AbsListView.obtainView(AbsListView.java:2177) 02-06 13:11:20.711:E/AndroidRuntime(1288):位于android.widget.ListView.makeAndAddView(ListView.java:1840) 02-06 13:11:20.711:E/AndroidRuntime(1288):位于android.widget.ListView.fillSpecific(ListView.java:1321) 02-06 13:11:20.711:E/AndroidRuntime(1288):位于android.widget.ListView.layoutChildren(ListView.java:1633) 02-06 13:11:20.711:E/AndroidRuntime(1288):在android.widget.AbsListView.onLayout(AbsListView.java:2012) 02-06 13:11:20.711:E/AndroidRuntime(1288):在android.view.view.layout(view.java:14289)上 02-06 13:11:20.711:E/AndroidRuntime(1288):在android.view.ViewGroup.layout(ViewGroup.java:4562)上 02-06 13:11:20.711:E/AndroidRuntime(1288):在android.widget.FrameLayout.onLayout(FrameLayout.java:448) 02-06 13:11:20.711:E/AndroidRuntime(1288):在android.view.view.layout(view.java:14289)上 02-06 13:11:20.7
package course.labs.todomanager;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.text.ParseException;
import java.util.Date;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ListView;
import android.widget.TextView;
import course.labs.todomanager.ToDoItem.Priority;
import course.labs.todomanager.ToDoItem.Status;

public class ToDoManagerActivity extends ListActivity {

private static final int ADD_TODO_ITEM_REQUEST = 0;
private static final String FILE_NAME = "TodoManagerActivityData.txt";
private static final String TAG = "Lab-UserInterface";

// IDs for menu items
private static final int MENU_DELETE = Menu.FIRST;
private static final int MENU_DUMP = Menu.FIRST + 1;

ToDoListAdapter mAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Create a new TodoListAdapter for this ListActivity's ListView
    mAdapter = new ToDoListAdapter(getApplicationContext());

    // Put divider between ToDoItems and FooterView
    getListView().setFooterDividersEnabled(true);

    // TODO - Inflate footerView for footer_view.xml file
    //TextView footerView = (TextView) findViewById(R.id.footerView);
    //LayoutInflater inflitrate= getLayoutInflater();
    //inflitrate.inflate(R.id.footerView, getListView());
    TextView footerView = (TextView) getLayoutInflater().inflate(R.layout.footer_view, null);
    // NOTE: You can remove this block once you've implemented the assignment
    //if (null == footerView) {
    //  return;
    //}
    // TODO - Add footerView to ListView
    ListView viewer= getListView();
    viewer.addFooterView(footerView);

    footerView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            Log.i(TAG,"Entered footerView.OnClickListener.onClick()");

            //TODO - Implement OnClick().
            Intent addone= new Intent (ToDoManagerActivity.this, AddToDoActivity.class);
            startActivityForResult(addone, ADD_TODO_ITEM_REQUEST);
        }
    });

    // TODO - Attach the adapter to this ListActivity's ListView
    viewer.setAdapter(mAdapter);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    Log.i(TAG,"Entered onActivityResult()");

    // TODO - Check result code and request code
    // if user submitted a new ToDoItem
    // Create a new ToDoItem from the data Intent
    // and then add it to the adapter
      if (requestCode == ADD_TODO_ITEM_REQUEST && resultCode == RESULT_OK)
      {
          ToDoItem toDoItem = new ToDoItem(data);
          mAdapter.add(toDoItem);
      }
}

// Do not modify below here

@Override
public void onResume() {
    super.onResume();

    // Load saved ToDoItems, if necessary

    if (mAdapter.getCount() == 0)
        loadItems();
}

@Override
protected void onPause() {
    super.onPause();

    // Save ToDoItems

    saveItems();

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

    menu.add(Menu.NONE, MENU_DELETE, Menu.NONE, "Delete all");
    menu.add(Menu.NONE, MENU_DUMP, Menu.NONE, "Dump to log");
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case MENU_DELETE:
        mAdapter.clear();
        return true;
    case MENU_DUMP:
        dump();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

private void dump() {

    for (int i = 0; i < mAdapter.getCount(); i++) {
        String data = ((ToDoItem) mAdapter.getItem(i)).toLog();
        Log.i(TAG,  "Item " + i + ": " + data.replace(ToDoItem.ITEM_SEP, ","));
    }

}

// Load stored ToDoItems
private void loadItems() {
    BufferedReader reader = null;
    try {
        FileInputStream fis = openFileInput(FILE_NAME);
        reader = new BufferedReader(new InputStreamReader(fis));

        String title = null;
        String priority = null;
        String status = null;
        Date date = null;

        while (null != (title = reader.readLine())) {
            priority = reader.readLine();
            status = reader.readLine();
            date = ToDoItem.FORMAT.parse(reader.readLine());
            mAdapter.add(new ToDoItem(title, Priority.valueOf(priority),
                    Status.valueOf(status), date));
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ParseException e) {
        e.printStackTrace();
    } finally {
        if (null != reader) {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

// Save ToDoItems to file
private void saveItems() {
    PrintWriter writer = null;
    try {
        FileOutputStream fos = openFileOutput(FILE_NAME, MODE_PRIVATE);
        writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
                fos)));

        for (int idx = 0; idx < mAdapter.getCount(); idx++) {

            writer.println(mAdapter.getItem(idx));

        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (null != writer) {
            writer.close();
        }
    }
}
}
package course.labs.todomanager;

import java.util.Calendar;
import java.util.Date;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.TimePickerDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.TimePicker;
import course.labs.todomanager.ToDoItem.Priority;
import course.labs.todomanager.ToDoItem.Status;

public class AddToDoActivity extends Activity {

// 7 days in milliseconds - 7 * 24 * 60 * 60 * 1000
private static final int SEVEN_DAYS = 604800000;

private static final String TAG = "Lab-UserInterface";

private static String timeString;
private static String dateString;
private static TextView dateView;
private static TextView timeView;

private Date mDate;
private RadioGroup mPriorityRadioGroup;
private RadioGroup mStatusRadioGroup;
private EditText mTitleText;
private RadioButton mDefaultStatusButton;
private RadioButton mDefaultPriorityButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.add_todo);

    mTitleText = (EditText) findViewById(R.id.title);
    mDefaultStatusButton = (RadioButton) findViewById(R.id.statusNotDone);
    mDefaultPriorityButton = (RadioButton) findViewById(R.id.medPriority);
    mPriorityRadioGroup = (RadioGroup) findViewById(R.id.priorityGroup);
    mStatusRadioGroup = (RadioGroup) findViewById(R.id.statusGroup);
    dateView = (TextView) findViewById(R.id.date);
    timeView = (TextView) findViewById(R.id.time);

    // Set the default date and time

    setDefaultDateTime();

    // OnClickListener for the Date button, calls showDatePickerDialog() to
    // show
    // the Date dialog

    final Button datePickerButton = (Button) findViewById(R.id.date_picker_button);
    datePickerButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            showDatePickerDialog();
        }
    });

    // OnClickListener for the Time button, calls showTimePickerDialog() to
    // show the Time Dialog

    final Button timePickerButton = (Button) findViewById(R.id.time_picker_button);
    timePickerButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            showTimePickerDialog();
        }
    });

    // OnClickListener for the Cancel Button,

    final Button cancelButton = (Button) findViewById(R.id.cancelButton);
    cancelButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            Log.i(TAG, "Entered cancelButton.OnClickListener.onClick()");

            // TODO - Indicate result and finish
             Intent returnIntent = new Intent();
                setResult(RESULT_CANCELED,returnIntent);
                finish();
        }
    });

    // TODO - Set up OnClickListener for the Reset Button
    final Button resetButton = (Button) findViewById(R.id.resetButton);
    resetButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.i(TAG, "Entered resetButton.OnClickListener.onClick()");

            // TODO - Reset data to default values
            mTitleText.setText("");
            setDefaultDateTime();
            mDefaultStatusButton.setChecked(true);
            mDefaultPriorityButton.setChecked(true);
        }
    });

    // Set up OnClickListener for the Submit Button

    final Button submitButton = (Button) findViewById(R.id.submitButton);
    submitButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.i(TAG, "Entered submitButton.OnClickListener.onClick()");

            // gather ToDoItem data

            // TODO - Get the current Priority
            Priority priority = getPriority();

            // TODO - Get the current Status
            Status status = getStatus();

            // TODO - Get the current ToDoItem Title
            String titleString = getToDoTitle();

            // Construct the Date string
            String fullDate = dateString + " " + timeString;

            // Package ToDoItem data into an Intent
            Intent data = new Intent();
            ToDoItem.packageIntent(data, titleString, priority, status,
                    fullDate);

            // TODO - return data Intent and finish
            setResult(Activity.RESULT_OK,data);
            finish();
        }
    });
}

// Do not modify below this point.

private void setDefaultDateTime() {

    // Default is current time + 7 days
    mDate = new Date();
    mDate = new Date(mDate.getTime() + SEVEN_DAYS);

    Calendar c = Calendar.getInstance();
    c.setTime(mDate);

    setDateString(c.get(Calendar.YEAR), c.get(Calendar.MONTH),
            c.get(Calendar.DAY_OF_MONTH));

    dateView.setText(dateString);

    setTimeString(c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE),
            c.get(Calendar.MILLISECOND));

    timeView.setText(timeString);
}

private static void setDateString(int year, int monthOfYear, int dayOfMonth) {

    // Increment monthOfYear for Calendar/Date -> Time Format setting
    monthOfYear++;
    String mon = "" + monthOfYear;
    String day = "" + dayOfMonth;

    if (monthOfYear < 10)
        mon = "0" + monthOfYear;
    if (dayOfMonth < 10)
        day = "0" + dayOfMonth;

    dateString = year + "-" + mon + "-" + day;
}

private static void setTimeString(int hourOfDay, int minute, int mili) {
    String hour = "" + hourOfDay;
    String min = "" + minute;

    if (hourOfDay < 10)
        hour = "0" + hourOfDay;
    if (minute < 10)
        min = "0" + minute;

    timeString = hour + ":" + min + ":00";
}

private Priority getPriority() {

    switch (mPriorityRadioGroup.getCheckedRadioButtonId()) {
    case R.id.lowPriority: {
        return Priority.LOW;
    }
    case R.id.highPriority: {
        return Priority.HIGH;
    }
    default: {
        return Priority.MED;
    }
    }
}

private Status getStatus() {

    switch (mStatusRadioGroup.getCheckedRadioButtonId()) {
    case R.id.statusDone: {
        return Status.DONE;
    }
    default: {
        return Status.NOTDONE;
    }
    }
}

private String getToDoTitle() {
    return mTitleText.getText().toString();
}


// DialogFragment used to pick a ToDoItem deadline date

public static class DatePickerFragment extends DialogFragment implements
        DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        // Use the current date as the default date in the picker

        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear,
            int dayOfMonth) {
        setDateString(year, monthOfYear, dayOfMonth);

        dateView.setText(dateString);
    }

}

// DialogFragment used to pick a ToDoItem deadline time

public static class TimePickerFragment extends DialogFragment implements
        TimePickerDialog.OnTimeSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        // Use the current time as the default values for the picker
        final Calendar c = Calendar.getInstance();
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);

        // Create a new instance of TimePickerDialog and return
        return new TimePickerDialog(getActivity(), this, hour, minute, true);
    }

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        setTimeString(hourOfDay, minute, 0);

        timeView.setText(timeString);
    }
}

private void showDatePickerDialog() {
    DialogFragment newFragment = new DatePickerFragment();
    newFragment.show(getFragmentManager(), "datePicker");
}

private void showTimePickerDialog() {
    DialogFragment newFragment = new TimePickerFragment();
    newFragment.show(getFragmentManager(), "timePicker");
}
}
package course.labs.todomanager;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import android.content.Intent;

public class ToDoItem {

public static final String ITEM_SEP = System.getProperty("line.separator");

public enum Priority {
    LOW, MED, HIGH
};

public enum Status {
    NOTDONE, DONE
};

public final static String TITLE = "title";
public final static String PRIORITY = "priority";
public final static String STATUS = "status";
public final static String DATE = "date";
public final static String FILENAME = "filename";

public final static SimpleDateFormat FORMAT = new SimpleDateFormat(
        "yyyy-MM-dd HH:mm:ss", Locale.US);

private String mTitle = new String();
private Priority mPriority = Priority.LOW;
private Status mStatus = Status.NOTDONE;
private Date mDate = new Date();

ToDoItem(String title, Priority priority, Status status, Date date) {
    this.mTitle = title;
    this.mPriority = priority;
    this.mStatus = status;
    this.mDate = date;
}

// Create a new ToDoItem from data packaged in an Intent

ToDoItem(Intent intent) {

    mTitle = intent.getStringExtra(ToDoItem.TITLE);
    mPriority = Priority.valueOf(intent.getStringExtra(ToDoItem.PRIORITY));
    mStatus = Status.valueOf(intent.getStringExtra(ToDoItem.STATUS));

    try {
        mDate = ToDoItem.FORMAT.parse(intent.getStringExtra(ToDoItem.DATE));
    } catch (ParseException e) {
        mDate = new Date();
    }
}

public String getTitle() {
    return mTitle;
}

public void setTitle(String title) {
    mTitle = title;
}

public Priority getPriority() {
    return mPriority;
}

public void setPriority(Priority priority) {
    mPriority = priority;
}

public Status getStatus() {
    return mStatus;
}

public void setStatus(Status status) {
    mStatus = status;
}

public Date getDate() {
    return mDate;
}

public void setDate(Date date) {
    mDate = date;
}

// Take a set of String data values and 
// package them for transport in an Intent

public static void packageIntent(Intent intent, String title,
        Priority priority, Status status, String date) {

    intent.putExtra(ToDoItem.TITLE, title);
    intent.putExtra(ToDoItem.PRIORITY, priority.toString());
    intent.putExtra(ToDoItem.STATUS, status.toString());
    intent.putExtra(ToDoItem.DATE, date);

}

public String toString() {
    return mTitle + ITEM_SEP + mPriority + ITEM_SEP + mStatus + ITEM_SEP
            + FORMAT.format(mDate);
}

public String toLog() {
    return "Title:" + mTitle + ITEM_SEP + "Priority:" + mPriority
            + ITEM_SEP + "Status:" + mStatus + ITEM_SEP + "Date:"
            + FORMAT.format(mDate);
}

}
package course.labs.todomanager;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.os.AsyncTask.Status;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class ToDoListAdapter extends BaseAdapter {

private final List<ToDoItem> mItems = new ArrayList<ToDoItem>();
private final Context mContext;

private static final String TAG = "Lab-UserInterface";

public ToDoListAdapter(Context context) {

    mContext = context;

}

// Add a ToDoItem to the adapter
// Notify observers that the data set has changed

public void add(ToDoItem item) {

    mItems.add(item);
    notifyDataSetChanged();

}

// Clears the list adapter of all items.

public void clear() {

    mItems.clear();
    notifyDataSetChanged();

}

// Returns the number of ToDoItems

@Override
public int getCount() {

    return mItems.size();

}

// Retrieve the number of ToDoItems

@Override
public Object getItem(int pos) {

    return mItems.get(pos);

}

// Get the ID for the ToDoItem
// In this case it's just the position

@Override
public long getItemId(int pos) {

    return pos;

}

// Create a View for the ToDoItem at specified position
// Remember to check whether convertView holds an already allocated View
// before created a new View.
// Consider using the ViewHolder pattern to make scrolling more efficient
// See: http://developer.android.com/training/improving-layouts/smooth-scrolling.html

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    // TODO - Get the current ToDoItem
    final ToDoItem toDoItem = (ToDoItem) getItem(position);

    // TODO - Inflate the View for this ToDoItem
    // from todo_item.xml
    //RelativeLayout itemLayout = null;

    // TODO - Fill in specific ToDoItem data
    // Remember that the data that goes in this View
    // corresponds to the user interface elements defined
    // in the layout file
    if (convertView==null){
        LayoutInflater inflator= (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView=inflator.inflate(R.layout.add_todo, null);
    }
    // TODO - Display Title in TextView
    final TextView titleView = (TextView) convertView.findViewById(R.id.titleView);
    titleView.setText(toDoItem.getTitle());


    // TODO - Set up Status CheckBox
    final CheckBox statusView = (CheckBox)convertView.findViewById(R.id.statusCheckBox);
    statusView.setChecked(toDoItem.getStatus()==course.labs.todomanager.ToDoItem.Status.DONE);


    statusView.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            Log.i(TAG, "Entered onCheckedChanged()");

            // TODO - set up an OnCheckedChangeListener, which
            // is called when the user toggles the status checkbox
            if (toDoItem.getStatus().equals(course.labs.todomanager.ToDoItem.Status.DONE)) 
            { 
                  toDoItem.setStatus(course.labs.todomanager.ToDoItem.Status.NOTDONE);  //Change it
            }
            else 
            {
                toDoItem.setStatus(course.labs.todomanager.ToDoItem.Status.DONE); //Change it
            }

        }
    });

    // TODO - Display Priority in a TextView

    final TextView priorityView = (TextView) convertView.findViewById(R.id.priorityView);
    priorityView.setText(toDoItem.getPriority().toString());


    // TODO - Display Time and Date.
    // Hint - use ToDoItem.FORMAT.format(toDoItem.getDate()) to get date and
    // time String

    final TextView dateView = (TextView)convertView.findViewById(R.id.dateView);
    dateView.setText(ToDoItem.FORMAT.format(toDoItem.getDate()));


    // Return the View you just created
    return convertView;

}
}
convertView=inflator.inflate(R.layout.add_todo, null); 
convertView=inflator.inflate(R.layout.add_todo, parent);