Muhammad Qumail
Muhammad Qumail

Reputation: 23

When i click on a listview item, the app crashes, instead of opening up another activity

I have MainActivity.Java that has a button. When the button is clicked, it opens the GradeListActivity.java which shows a ListView(I am using Fragment here). When I click on a ListView Item, my app crashes. Any help or guidance would be much appreciated. Thank You :)

My MainActivity.Java:

public class MainActivity extends Activity 
{
    public GradeCollection gc;  
    RatingBar GradeRatingBar;

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

        GradeRatingBar = (RatingBar) findViewById(R.id.ratingBar);

        gc = new GradeCollection();
        GradeData gd = new GradeData("Exam", 1, 85, "First Exam");
        GradeData gd15 = new GradeData("Exam", 2, 94, "Second Exam");
        GradeData gd2 = new GradeData("Homework", 1, 100, "Schedule");
        GradeData gd3 = new GradeData("Homework", 2, 100, "Hello goodbye");
        GradeData gd4= new GradeData("Quiz", 1, 0, "Syllabus");
        GradeData gd5 = new GradeData("Quiz", 2, 80, "Chapter 1");
        GradeData gd6 = new GradeData("Quiz", 3, 60, "Chapter 4");
        GradeData gd7 = new GradeData("Lab", 1, 100, "Hello yankees");
        GradeData gd8 = new GradeData("Lab", 2, 100, "Manifest and Different Screens");
        GradeData gd9 = new GradeData("Lab", 3, 100, "Internalization");
        GradeData gd10 = new GradeData("Lab", 4, 100, "Layout and Controls");
        GradeData gd11 = new GradeData("Lab", 5, 100, "Easy Fragment");
        GradeData gd12 = new GradeData("Lab", 6, 100, "Fragment");
        GradeData gd13 = new GradeData("Lab", 7, 100, "Array Adapters");
        GradeData gd14 = new GradeData("Lab", 8, 100, "Handle Implicit Intents");

        gc.AddGrade(gd);
        gc.AddGrade(gd15);
        gc.AddGrade(gd2);
        gc.AddGrade(gd3);
        gc.AddGrade(gd4);
        gc.AddGrade(gd5);
        gc.AddGrade(gd6);
        gc.AddGrade(gd7);
        gc.AddGrade(gd8);
        gc.AddGrade(gd9);
        gc.AddGrade(gd10);
        gc.AddGrade(gd11);
        gc.AddGrade(gd12);
        gc.AddGrade(gd13);
        gc.AddGrade(gd14);


        double numberGrade = gc.CalcGrade();
        String letterGrade = null;

        if (numberGrade >= 93)
        {
            letterGrade = "A";
        }
        else if (numberGrade >= 90 && numberGrade <= 92)
        {
            letterGrade = "A-";
        }
        else if (numberGrade >= 87 && numberGrade <= 89)
        {
            letterGrade = "B+";
        }
        else if (numberGrade >= 83 && numberGrade <= 86)
        {
            letterGrade = "B";
        }
        else if (numberGrade >= 80 && numberGrade <= 82)
        {
            letterGrade = "B-";
        }
        else if (numberGrade >= 77 && numberGrade <= 79)
        {
            letterGrade = "C+";
        }
        else if (numberGrade >= 73 && numberGrade <= 76)
        {
            letterGrade = "C";
        }
        else if (numberGrade >= 70 && numberGrade <= 72)
        {
            letterGrade = "C-";
        }
        else if (numberGrade >= 67 && numberGrade <= 69)
        {
            letterGrade = "D+";
        }
        else if (numberGrade >= 60 && numberGrade <= 66)
        {
            letterGrade = "D";
        }
        else
        {
            letterGrade = "F";
        }

        TextView textView = (TextView) findViewById(R.id.textViewNumericGrade);
        textView.setText(String.valueOf(numberGrade));

        TextView textView2 = (TextView) findViewById(R.id.textViewLetterGrade);
        textView2.setText(letterGrade);

        if(letterGrade == "A" || letterGrade == "A-")
        {
            GradeRatingBar.setRating(4);
        }
        if (letterGrade == "B+" || letterGrade == "B" || letterGrade == "B-")
        {
            GradeRatingBar.setRating(3);
        }
        if (letterGrade == "C+" || letterGrade == "C" || letterGrade == "C-")
        {
            GradeRatingBar.setRating(2);
        }
        if (letterGrade == "D+" || letterGrade == "D")
        {
            GradeRatingBar.setRating(1);
        }
        if (letterGrade == "F")
        {
            GradeRatingBar.setRating(0);
        }

        Button viewGrades = (Button)findViewById(R.id.buttonViewGrade);
        viewGrades.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v)
        {
            Intent intent = new Intent(MainActivity.this, GradeListActivity.class);
            intent.putExtra("OriginalGradeCollectionInstance", gc);

            startActivity(intent);
        }
           });

    }
}

My GradeListActivity.java:

public class GradeListActivity extends Activity
{
    public GradeCollection gc = new GradeCollection();

    //private ArrayAdapter<String> namesArrayAdapter;
    //ListView lv;

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

        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ListViewFragment LVF = new ListViewFragment();
        ft.add(R.id.ui_container, LVF);
        ft.commit();


    }



}

My GradeDetailActivity:

public class GradeDetailActivity extends Activity{
    public GradeCollection gc;
    public int position;

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

        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        GradeDetailFragment GDF = new GradeDetailFragment();
        ft.add(R.id.ui_container, GDF);
        ft.commit();

    }

}

My ListViewFragment:

public class ListViewFragment extends Fragment{

    public GradeCollection gc = new GradeCollection();
    public ArrayList<String> gcCategoryList;
    public ArrayAdapter<String> gcArrayAdapter;

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

        View v = inflater.inflate(R.layout.list_view_fragment, container, false);



        Activity a = getActivity();

        Intent i = a.getIntent();

        gc = (GradeCollection) i.getExtras().getSerializable("OriginalGradeCollectionInstance");
        gcCategoryList = gc.GetCategoryArrayList();

        gcArrayAdapter = new ArrayAdapter<String>(a, R.layout.listview,  gcCategoryList);



        ListView lv = (ListView) v.findViewById(R.id.listViewPortrait);

        lv.setAdapter(gcArrayAdapter);


        lv.setOnItemClickListener(new OnItemClickListener()
        {
            @Override public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
            { 
                Intent intent = new Intent(ListViewFragment.this.getActivity(), GradeDetailActivity.class);
                intent.putExtra("OriginalGradeCollectionInstance", gc);
                intent.putExtra("position", position);

                startActivity(intent);


            }
        });

        return v;
    }

}

My GradeDetailFragment:

public class GradeDetailFragment extends Fragment {

    public GradeCollection gc = new GradeCollection();
    public int position;


    @Override
    public View onCreateView(   LayoutInflater inflater,
        ViewGroup container,
        Bundle savedInstanceState) 
    {   
        View v = inflater.inflate(R.layout.grade_detail_fargment, container, false);

        Activity a = getActivity();
        Intent i = a.getIntent();

        gc = (GradeCollection) i.getExtras().getSerializable("OriginalGradeCollectionInstance");
        position = (Integer) i.getExtras().getSerializable("position");

        EditText textCategory = (EditText) v.findViewById(R.id.editTextCategory);
        EditText textNumber = (EditText) v.findViewById(R.id.editTextNumber);
        EditText textGrade = (EditText) v.findViewById(R.id.editTextGrade);
        EditText textDescription = (EditText) v.findViewById(R.id.editTextDescription);

        textCategory.setText(gc.GetItem(position).getCategory());
        textNumber.setText(gc.GetItem(position).getNumber());
        String grade = "" + gc.GetItem(position).getGrade();
        textGrade.setText(grade);
        textDescription.setText(gc.GetItem(position).getDescription());

        return v;
    }
}

My activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LetterGrade"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" >

    <TextView
        android:id="@+id/textViewStudentName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/student_name" />

    <Button
        android:id="@+id/buttonViewGrade"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/ratingBar"
        android:layout_marginTop="125dp"
        android:text="@string/view_grades_button" />

    <RatingBar
        android:id="@+id/ratingBar"
        style="=?android:attr/ratingBarStyleIndicator"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:isIndicator="true"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textViewStudentName"
        android:layout_marginTop="14dp"
        android:numStars="4"
        android:stepSize="1" />

    <TextView
        android:id="@+id/textViewNumericGrade"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/ratingBar"
        android:text="@string/numeric_grade" />
    <TextView
        android:id="@+id/textViewLetterGrade"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textViewNumericGrade"
        android:text="@string/letter_grade" />

</RelativeLayout>

My grade_list_activity.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" >


     <FrameLayout
        android:id="@+id/ui_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
    />

</LinearLayout>

My list_view_fragment:

<?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" >

    <ListView
        android:id="@+id/listViewPortrait"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>

</LinearLayout>

My listview.xml (has only a TextView, for the ArrayAdapter):

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


</TextView>

My grade_detail_activity.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" >

    <FrameLayout
        android:id="@+id/ui_detail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
    />

</LinearLayout>

My grade_detail_fragment.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" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <TextView
            android:id="@+id/textViewCategory"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:text="@string/category_text_field_title" />

        <TextView
            android:id="@+id/textViewDescription"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/textViewGrade"
            android:layout_marginTop="38dp"
            android:text="@string/description_text_field_title" />

        <TextView
            android:id="@+id/textViewGrade"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/textViewNumber"
            android:layout_marginTop="29dp"
            android:text="@string/grade_text_field_title" />

        <TextView
            android:id="@+id/textViewNumber"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/textViewCategory"
            android:layout_marginTop="26dp"
            android:text="@string/number_text_field_title" />

        <EditText
            android:id="@+id/editTextCategory"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:editable="false"
            android:ems="10" >

            <requestFocus />
        </EditText>

        <EditText
            android:id="@+id/editTextNumber"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignTop="@+id/textViewNumber"
            android:editable="false"
            android:ems="10" />

        <EditText
            android:id="@+id/editTextGrade"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/editText1"
            android:layout_alignParentRight="true"
            android:layout_alignTop="@+id/textViewGrade"
            android:editable="false"
            android:ems="10" />

        <EditText
            android:id="@+id/editTextDescription"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/textViewDescription"
            android:layout_alignBottom="@+id/textViewDescription"
            android:layout_alignParentRight="true"
            android:editable="false"
            android:ems="10" />

    </RelativeLayout>


</LinearLayout>

Part of the LogCat:

04-13 22:43:14.805: E/AndroidRuntime(4306): FATAL EXCEPTION: main
04-13 22:43:14.805: E/AndroidRuntime(4306): java.lang.RuntimeException: Unable to start activity ComponentInfo{bcs421.muhammadqumail.hwk.gradeapp.presentation/bcs421.muhammadqumail.hwk.gradeapp.presentation.GradeDetailActivity}: android.content.res.Resources$NotFoundException: String resource ID #0x1
04-13 22:43:14.805: E/AndroidRuntime(4306):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
04-13 22:43:14.805: E/AndroidRuntime(4306):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
04-13 22:43:14.805: E/AndroidRuntime(4306):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
04-13 22:43:14.805: E/AndroidRuntime(4306):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
04-13 22:43:14.805: E/AndroidRuntime(4306):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-13 22:43:14.805: E/AndroidRuntime(4306):     at android.os.Looper.loop(Looper.java:137)
04-13 22:43:14.805: E/AndroidRuntime(4306):     at android.app.ActivityThread.main(ActivityThread.java:5041)
04-13 22:43:14.805: E/AndroidRuntime(4306):     at java.lang.reflect.Method.invokeNative(Native Method)
04-13 22:43:14.805: E/AndroidRuntime(4306):     at java.lang.reflect.Method.invoke(Method.java:511)
04-13 22:43:14.805: E/AndroidRuntime(4306):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
04-13 22:43:14.805: E/AndroidRuntime(4306):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
04-13 22:43:14.805: E/AndroidRuntime(4306):     at dalvik.system.NativeStart.main(Native Method)
04-13 22:43:14.805: E/AndroidRuntime(4306): Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x1
04-13 22:43:14.805: E/AndroidRuntime(4306):     at android.content.res.Resources.getText(Resources.java:230)
04-13 22:43:14.805: E/AndroidRuntime(4306):     at android.widget.TextView.setText(TextView.java:3769)
04-13 22:43:14.805: E/AndroidRuntime(4306):     at bcs421.muhammadqumail.hwk.gradeapp.presentation.GradeDetailFragment.onCreateView(GradeDetailFragment.java:38)
04-13 22:43:14.805: E/AndroidRuntime(4306):     at android.app.Fragment.performCreateView(Fragment.java:1695)
04-13 22:43:14.805: E/AndroidRuntime(4306):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)
04-13 22:43:14.805: E/AndroidRuntime(4306):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
04-13 22:43:14.805: E/AndroidRuntime(4306):     at android.app.BackStackRecord.run(BackStackRecord.java:682)
04-13 22:43:14.805: E/AndroidRuntime(4306):     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)
04-13 22:43:14.805: E/AndroidRuntime(4306):     at android.app.Activity.performStart(Activity.java:5113)
04-13 22:43:14.805: E/AndroidRuntime(4306):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2153)
04-13 22:43:14.805: E/AndroidRuntime(4306):     ... 11 more

Upvotes: 1

Views: 836

Answers (2)

MartinH
MartinH

Reputation: 154

Try:

    textCategory.setText(gc.GetItem(position).getCategory() + "");
    textNumber.setText(gc.GetItem(position).getNumber() + "");

It looks like you were passing an integer into TextView.setText(), which resolves into using the TextView.setText(int resid) method signature instead of TextView.setText(CharSequence text)

Upvotes: 0

Sanj
Sanj

Reputation: 850

Your onCreate in GradeDetailActivity, sets the content view to R.layout.grade_detail_activity

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

    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    GradeDetailFragment GDF = new GradeDetailFragment();
    ft.add(R.id.ui_container, GDF);
    ft.commit();
}

However grade_detail_activity.xml does not have R.id.ui_container, it has R.id.ui_detail defined for the FrameLayout

<?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" >

    <FrameLayout
        android:id="@+id/ui_detail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
    />
</LinearLayout>

Upvotes: 1

Related Questions