Reputation: 23
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
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
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