1

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(
bow_one
  • 11
  • 1
  • 4

4 Answers4

0

try

View v = super.onCreateView(inflater,parent,savedInstanceState);

change to

 View v = inflater.inflate(NAME LAYOUT, container, false);
souttab
  • 696
  • 6
  • 12
0

Check your drawable/background_activated i.e. the background image of your root layout - the VM runs out of memory when decoding the bitmap. Make the image dimensions smaller.

Exception
  • 2,273
  • 1
  • 24
  • 42
0

As you use ListFragment, you have to call setListAdapter() method in

onActivityCreated() method, because ListFragment has to inflate xml of listview. (it does in onCreateView() )

You call setListAdapter() in onCreate() that calls before onCreateView()

streamride
  • 567
  • 4
  • 16
0

Thanks for all of your help help! I found out that the attribute to the background color of drawable/background_activated was misplaced. Such a small mistake can really cost me my time!

bow_one
  • 11
  • 1
  • 4