-3

This is my first work on android development so I apologize in advance if the problem is one which is very minor or simple. The error I'm getting is that

com.exmaple.appname has stopped unexpectedly

My app consist of 3 java classes and 3 xml classes:

Java

  • DataProvider.java
  • MainActivity.java
  • MoviesAdapter.java

XML

  • activity_main.xml
  • child_layout.xml
  • parent_layout.xml

My code follows below:

MainActivity.class:

package com.example.expandablelist;

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

import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ExpandableListView;

public class MainActivity extends ActionBarActivity implements OnClickListener{
    private static final Intent Intent = null;
    HashMap<String, List<String>> Movies_category;
    List<String> Movies_list;
    ExpandableListView Exp_list;
    MoviesAdapter adapter;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Exp_list = (ExpandableListView) findViewById(R.id.exp_list);
    Movies_category = DataProvider.getInfo();
    Movies_list = new ArrayList<String>(Movies_category.keySet());
    adapter = new MoviesAdapter(this, Movies_category, Movies_list);
    Exp_list.setAdapter(adapter);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

@Override
public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub

}

}

DataProvide.java

 package com.example.expandablelist;

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

public class DataProvider{

public static HashMap<String, List<String>> getInfo() 
{
    HashMap<String, List<String>> MoviesDetails = new HashMap<String, List<String>>();
            List<String> Action_Movies = new ArrayList<String>();
            Action_Movies.add("Action Movie 1");
            Action_Movies.add("Action Movie 2");
            Action_Movies.add("Action Movie 3");
            Action_Movies.add("Action Movie 4");

            List<String> Romantic_Movies = new ArrayList<String>();
            Action_Movies.add("Romantic Movie 1");
            Action_Movies.add("Romantic Movie 2");
            Action_Movies.add("Romantic Movie 3");
            Action_Movies.add("Romantic Movie 4");

            List<String> Horror_Movies = new ArrayList<String>();
            Action_Movies.add("Horror Movie 1");
            Action_Movies.add("Horror Movie 2");
            Action_Movies.add("Horror Movie 3");
            Action_Movies.add("Horro Movie 4");

            List<String> Comedy_Movies = new ArrayList<String>();
            Action_Movies.add("Comedy Movie 1");
            Action_Movies.add("Comedy Movie 2");
            Action_Movies.add("Comedy Movie 3");
            Action_Movies.add("Comedy Movie 4");

            MoviesDetails.put("Action Movies", Action_Movies);
            MoviesDetails.put("Romantic Movies", Romantic_Movies);
            MoviesDetails.put("Horror Movies", Horror_Movies);
            MoviesDetails.put("Comedy Movies", Comedy_Movies);

            return MoviesDetails;
            }

}

MoviesAdpater.java

package com.example.expandablelist;

import java.util.HashMap;
import java.util.List;

import android.content.Context;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;

public class MoviesAdapter extends BaseExpandableListAdapter{
    private Context ctx;
    private HashMap<String, List<String>> Movies_category;
    private List<String> Movies_List;

    public MoviesAdapter(Context ctx, HashMap<String, List<String>> Movies_category, List<String> Movies_List) 
    {
        this.ctx=ctx;
        this.Movies_category=Movies_category;
        this.Movies_List=Movies_List;
    }

    @Override
    public int getGroupCount() {
        // TODO Auto-generated method stub
        return Movies_List.size();
    }

    @Override
    public int getChildrenCount(int arg0) {
        // TODO Auto-generated method stub
        return Movies_category.get(Movies_List.get(arg0)).size();
    }

    @Override
    public Object getGroup(int arg0) {
        // TODO Auto-generated method stub
        return Movies_List.get(arg0);
    }

    @Override
    public Object getChild(int parent, int child) {
        // 
        return Movies_category.get(Movies_List.get(parent)).get(child);
    }
//*********** Last thing I did - on video (part 2) until 7.15. **************
    @Override
    public long getGroupId(int arg0) {
        // TODO Auto-generated method stub
        return arg0;
    }

    @Override
    public long getChildId(int parent, int child) {
        // TODO Auto-generated method stub
        return child;
    }

    @Override
    public boolean hasStableIds() {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public View getGroupView(int parent, boolean isExpanded,
            View convertView, ViewGroup parentView) {
        // TODO Auto-generated method stub
        String group_title = (String) getGroup(parent);
        if(convertView == null)
        {
            LayoutInflater inflator = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflator.inflate(R.layout.parent_layout, parentView,false);
        }
        TextView parent_textview = (TextView) convertView.findViewById(R.id.parent_txt);
        parent_textview.setTypeface(null, Typeface.BOLD);
        parent_textview.setText(group_title);
        return convertView;
    }

    @Override
    public View getChildView(int parent, int child, boolean lastChild, View convertView, ViewGroup parentview) 
    {
        String child_title = (String) getChild(parent, child);
        if (convertView == null)
        {
            LayoutInflater inflator = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflator.inflate(R.layout.child_layout, parentview,false);
        }

        TextView child_textview = (TextView) convertView.findViewById(R.id.child_txt);
        child_textview.setText(child_title);
        return convertView;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        // TODO Auto-generated method stub
        return false;
    }

}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">


<ExpandableListView
android:id="@+id/exp_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="#A4C739"
android:dividerHeight="0.5dp"
android:indicatorLeft="?android:attr/expandableListPreferredItemIndicatorLeft" 
android:layout_weight="1">

</ExpandableListView>

<Button
    android:id="@+id/btnSimple"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:text="Next" />

child_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

    <TextView
        android:id="@+id/child_txt"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"/>


</LinearLayout>

parent_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/parent_txt"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="?android:attr/expandableListPreferredItemIndicatorLeft"
        android:textColor="#A4C739" 
        android:paddingTop="10dp"
        android:paddingBottom="10dp"/>

</LinearLayout>

I appreciate all the help I can get.

Thanks in advance.

Regards,

J

joebegborg07
  • 821
  • 3
  • 14
  • 27

1 Answers1

0

Where is your setContentView() in this code, with out layout. how you will get ListView

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   //  add setContentView() here
   Exp_list = (ExpandableListView) findViewById(R.id.exp_list);
   Movies_category = DataProvider.getInfo();
   Movies_list = new ArrayList<String>(Movies_category.keySet());
   adapter = new MoviesAdapter(this, Movies_category, Movies_list);
   Exp_list.setAdapter(adapter);
}
RajaReddy PolamReddy
  • 22,428
  • 19
  • 115
  • 166
  • Thanks for your reply. I added **setContentView(Exp_List)** after **adapter = new MoviesAdapter(this, Movies_category, Movies_list);**, however after debugging, it shows that the adapter returns **null**. Does that Help with troubleshooting ? Thanks in advance. – joebegborg07 Mar 10 '15 at 08:58