Whenever I launch the app that I have just developed, I am greeted by this error. I have looked through my code, but still can't determine the cause of the error. It would be much appreciated if you could take a look and correct any mistakes that I have made.
Code:
package com.bowenchin.android.materialtasks.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.widget.AbsListView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.text.format.DateFormat;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;
import com.bowenchin.android.material.R;
import com.bowenchin.android.materialtasks.model.Task;
import com.bowenchin.android.materialtasks.model.TaskLab;
import java.util.ArrayList;
import java.util.UUID;
/**
* Created by bowenchin on 21/7/2015.
*/
public class TaskListFragment extends ListFragment {
private ArrayList<Task> mTasks;
private static final String TAG = "TaskListFragment";
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
getActivity().setTitle(R.string.tasks_title);
mTasks= TaskLab.get(getActivity()).getTasks();
TaskAdapter adapter = new TaskAdapter(mTasks);
setListAdapter(adapter);
}
@Override
public void onResume(){
super.onResume();
((TaskAdapter)getListAdapter()).notifyDataSetChanged();
}
@Override
public void onListItemClick(ListView l, View v, int position, long id){
//Task t = (Task)(getListAdapter()).getItem(position);
Task t = ((TaskAdapter)getListAdapter()).getItem(position);
//Start TaskActivity
Intent taskActivity = new Intent(getActivity(),TaskView.class);
taskActivity.putExtra(TaskFragment.EXTRA_TASK_ID, t.getId());
startActivity(taskActivity);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
@Override
public void onDetach() {
super.onDetach();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
((TaskAdapter)getListAdapter()).notifyDataSetChanged();
}
private class TaskAdapter extends ArrayAdapter<Task>{
public TaskAdapter(ArrayList<Task> tasks){
super(getActivity(),0,tasks);
//super(getActivity(), android.R.layout.simple_list_item_1, tasks);
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
//if no view, inflate one
if(convertView == null){
convertView = getActivity().getLayoutInflater().inflate(R.layout.list_item_task,null);
}
// Configure the view for this Task
Task t = getItem(position);
TextView titleTextView = (TextView)convertView.findViewById(R.id.task_list_item_titleTextView);
titleTextView.setText(t.getTitle());
TextView dateTextView=(TextView)convertView.findViewById(R.id.task_list_item_dateTextView);
dateTextView.setText(DateFormat.format("EEEE, MMM dd, yyyy", t.getDate()).toString());
CheckBox checkedCheckBox = (CheckBox)convertView.findViewById(R.id.task_list_item_solvedCheckBox);
checkedCheckBox.setChecked(t.isChecked());
return convertView;
}
}
@Override
public void onCreateContextMenu(ContextMenu menu,View v,ContextMenu.ContextMenuInfo menuInfo){
getActivity().getMenuInflater().inflate(R.menu.task_list_item_context,menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();
int position = info.position;
TaskAdapter adapter = (TaskAdapter)getListAdapter();
Task task = adapter.getItem(position);
switch (item.getItemId()) {
case R.id.menu_item_delete_task:
TaskLab.get(getActivity()).deleteTask(task);
adapter.notifyDataSetChanged();
return true;
}
return super.onContextItemSelected(item);
}
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup parent, Bundle savedInstanceState){
View v = super.onCreateView(inflater,parent,savedInstanceState);
ListView listView = (ListView)v.findViewById(android.R.id.list);
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB){
//User floating context menus
registerForContextMenu(listView);
}
else{
//Contextual action bar
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.task_list_item_context, menu);
return true;
}
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
}
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_item_delete_task:
TaskAdapter adapter = (TaskAdapter) getListAdapter();
TaskLab taskLab = TaskLab.get(getActivity());
for (int i = adapter.getCount() - 1; i >= 0; i--) {
if (getListView().isItemChecked(i)) {
taskLab.deleteTask(adapter.getItem(i));
}
}
mode.finish();
adapter.notifyDataSetChanged();
return true;
default:
return false;
}
}
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
public void onDestroyActionMode(ActionMode mode) {
}
});
}
return v;
}
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:background="@drawable/background_activated"
>
<CheckBox
android:id="@+id/task_list_item_solvedCheckBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_alignParentLeft="true"
android:enabled="false"
android:focusable="false"
android:padding="2dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="10dp"
android:layout_marginTop="11dp"
/>
<TextView
android:id="@+id/task_list_item_titleTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/task_list_item_solvedCheckBox"
android:textSize="20sp"
android:textStyle="bold"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:paddingBottom="2dp"
android:paddingTop="4dp"
android:text="Task title"
android:textColor="?attr/themedTextColorPrimary"
android:fontFamily="sans-serif-thin"
/>
<TextView
android:id="@+id/task_list_item_dateTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/task_list_item_titleTextView"
android:layout_toRightOf="@id/task_list_item_solvedCheckBox"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:text="Task date"
android:paddingBottom="5dp"
android:paddingTop="2dp"
android:textColor="?attr/themedTextColorSecondary"
/>
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="?attr/themedColorPrimaryLight"
android:layout_alignBottom="@id/task_list_item_dateTextView"
/>
</RelativeLayout>
LogCat:
07-24 16:28:59.530 5630-5630/com.bowenchin.android.materialapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.bowenchin.android.materialapp, PID: 5630
android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
at android.view.LayoutInflater.createView(LayoutInflater.java:633)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)
at android.view.LayoutInflater.inflate(LayoutInflater.java:482)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at com.bowenchin.android.materialtasks.activity.TaskListFragment$TaskAdapter.getView(TaskListFragment.java:89)
at android.widget.AbsListView.obtainView(AbsListView.java:2344)
at android.widget.ListView.makeAndAddView(ListView.java:1864)
at android.widget.ListView.fillDown(ListView.java:698)
at android.widget.ListView.fillFromTop(ListView.java:759)
at android.widget.ListView.layoutChildren(ListView.java:1673)
at android.widget.AbsListView.onLayout(AbsListView.java:2148)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:907)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2072)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1829)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(