Android : EditText returns null in my Fragment?

on Monday, April 13, 2015


I am doing an Android app that communicates data between fragments. On my GradeListFragment, I populate a listView with different kinds of grades. When one of these grades are clicked, I bring up my GradeInfoFragment which will take the grade that was clicked and display more detailed information on the screen. The GradeInfoFragment contains four EditText fields which are displayed properly, but my issue is when I click on the grade in my GradeListFragment, the EditText fields are returning null on my GradeInfoFragment. I have created methods across the Activity containing the two fragments and the fragments themselves to handle the data and every method works great except the getData(GradeData thisGrade) method in my GradeInfoFragment which is supposed to fill in the EditText fields with the appropiate data. Below is my code and my LogCat. Thanks again in advance I have been stuck on this for over a week!


GradeListActitivy.java



package bcs421.jorgeramirez.hwk.gradeapp.presentation;

import java.util.ArrayList;

import bcs421.jorgeramirez.hwk.gradeapp.businesslogic.GradeCollection;
import bcs421.jorgeramirez.hwk.gradeapp.businesslogic.GradeData;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.util.Log;
import android.view.Surface;
import android.view.View;
import android.widget.EditText;
import android.support.v4.app.FragmentTransaction;


public class GradeListActivity extends FragmentActivity{


public GradeCollection gradeList;
public ArrayList<String> gradeCatList;
public GradeListFragment frag1 = new GradeListFragment();
public GradeInfoFragment frag2 = new GradeInfoFragment();
FragmentTransaction ft;

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

Intent i = getIntent();
gradeList = (GradeCollection) i.getSerializableExtra("grade_collection");
gradeCatList = i.getStringArrayListExtra("grade_list");

int rotation = getWindowManager().getDefaultDisplay().getRotation();





if((rotation == Surface.ROTATION_90) || (rotation == Surface.ROTATION_270))
{
FragmentManager fm = getSupportFragmentManager();
ft = fm.beginTransaction();
ft.add(R.id.frag_container1, frag1, "list_frag");
ft.add(R.id.frag_container2, frag2, "info_frag");
ft.commit();

}
else
{
ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.replace_this, frag1, "list_frag");
ft.commit();
}





}



public GradeCollection getGrades()
{
return gradeList;
}

public ArrayList<String> getCatList()
{
return gradeCatList;
}

public void replaceInfoFragment()
{
FragmentTransaction fragT = getSupportFragmentManager().beginTransaction();
fragT.replace(R.id.replace_this, frag2, "info_frag");
fragT.addToBackStack(null);
fragT.commit();

}

public GradeListFragment getListFrag()
{
return frag1;
}

public GradeInfoFragment getInfoFrag()
{
return frag2;
}


}


GradeListFragment.java



package bcs421.jorgeramirez.hwk.gradeapp.presentation;

import java.io.Serializable;
import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Surface;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import bcs421.jorgeramirez.hwk.gradeapp.businesslogic.GradeCollection;
import bcs421.jorgeramirez.hwk.gradeapp.businesslogic.GradeData;


public class GradeListFragment extends Fragment implements Serializable {



SendGrades SG;
public GradeCollection collectedGrades;

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

View v = inflater.inflate(R.layout.fragment_gradelist, container, false);
ListView lv = (ListView) v.findViewById(R.id.listViewGrades);

ArrayList<String> namesArrayList;
ArrayAdapter<String> namesArrayAdapter;


final Activity a = (GradeListActivity)getActivity();
collectedGrades = ((GradeListActivity) a).getGrades();
namesArrayList = ((GradeListActivity) a).getCatList();
namesArrayAdapter = new ArrayAdapter<String>(a, R.layout.item_gradelist, namesArrayList);
lv.setAdapter(namesArrayAdapter);
lv.setClickable(false);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

int currentOrientation = getResources().getConfiguration().orientation;
if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE) {
GradeInfoFragment f2 = ((GradeListActivity) a).getInfoFrag();
GradeData thisGrade = collectedGrades.GetItem(position);
f2.getData(thisGrade);
}
else {
((GradeListActivity) a).replaceInfoFragment();
GradeInfoFragment f2 = ((GradeListActivity) a).getInfoFrag();
GradeData thisGrade = collectedGrades.GetItem(position);
if(f2 == null)
{
Log.e("Error!", "F2 is null!");
}
if(thisGrade == null)
{
Log.e("Error!", "thisGrade is null!");
}
f2.getData(thisGrade);


}


}
});


return v;
}










}


GradeInfoFragment.java



package bcs421.jorgeramirez.hwk.gradeapp.presentation;

import java.util.ArrayList;

import bcs421.jorgeramirez.hwk.gradeapp.businesslogic.GradeCollection;
import bcs421.jorgeramirez.hwk.gradeapp.businesslogic.GradeData;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

public class GradeInfoFragment extends Fragment {


public GradeCollection collectedGrades;
private EditText categoryText, numberText, gradeText, descText;
private View v;


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

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

Activity a = (GradeListActivity)getActivity();

collectedGrades = ((GradeListActivity) a).getGrades();



categoryText = (EditText)v.findViewById(R.id.editCat);
numberText = (EditText)v.findViewById(R.id.editNumber);
gradeText = (EditText)v.findViewById(R.id.editGrade);
descText = (EditText)v.findViewById(R.id.editDesc);
categoryText.setText(" ");
numberText.setText(" ");
gradeText.setText(" ");
descText.setText(" ");



return v;
}


public void getData(GradeData thisGrade)
{
double gd = thisGrade.getGrade();
String gValue = Double.toString(gd);
if(categoryText == null)
{
Log.e("Error!", "categoryText is null!");
}
categoryText.setText(thisGrade.getCategory());
numberText.setText(thisGrade.getNumber());
gradeText.setText(gValue);
descText.setText(thisGrade.getDescription());
}



}


fragment_gradeinfo.xml



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

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:id="@+id/textCat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cat_label"
android:textAppearance="?android:attr/textAppearanceLarge" />

<EditText
android:id="@+id/editCat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" >

<requestFocus />
</EditText>

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:id="@+id/textNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/num_label"
android:textAppearance="?android:attr/textAppearanceLarge" />

<EditText
android:id="@+id/editNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" />

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:id="@+id/textGrade"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/grade_label"
android:textAppearance="?android:attr/textAppearanceLarge" />

<EditText
android:id="@+id/editGrade"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" />

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:id="@+id/textDesc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/desc_label"
android:textAppearance="?android:attr/textAppearanceLarge" />

<EditText
android:id="@+id/editDesc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" />

</LinearLayout>

</LinearLayout>


LogCat



04-13 13:42:31.211: E/Error!(2367): categoryText is null!
04-13 13:42:31.211: D/AndroidRuntime(2367): Shutting down VM
04-13 13:42:31.211: W/dalvikvm(2367): threadid=1: thread exiting with uncaught exception (group=0xb1d66b20)
04-13 13:42:31.211: E/AndroidRuntime(2367): FATAL EXCEPTION: main
04-13 13:42:31.211: E/AndroidRuntime(2367): Process: bcs421.jorgeramirez.hwk.gradeapp.presentation, PID: 2367
04-13 13:42:31.211: E/AndroidRuntime(2367): java.lang.NullPointerException
04-13 13:42:31.211: E/AndroidRuntime(2367): at bcs421.jorgeramirez.hwk.gradeapp.presentation.GradeInfoFragment.getData(GradeInfoFragment.java:63)
04-13 13:42:31.211: E/AndroidRuntime(2367): at bcs421.jorgeramirez.hwk.gradeapp.presentation.GradeListFragment$1.onItemClick(GradeListFragment.java:71)
04-13 13:42:31.211: E/AndroidRuntime(2367): at android.widget.AdapterView.performItemClick(AdapterView.java:299)
04-13 13:42:31.211: E/AndroidRuntime(2367): at android.widget.AbsListView.performItemClick(AbsListView.java:1113)
04-13 13:42:31.211: E/AndroidRuntime(2367): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2904)
04-13 13:42:31.211: E/AndroidRuntime(2367): at android.widget.AbsListView$3.run(AbsListView.java:3638)
04-13 13:42:31.211: E/AndroidRuntime(2367): at android.os.Handler.handleCallback(Handler.java:733)
04-13 13:42:31.211: E/AndroidRuntime(2367): at android.os.Handler.dispatchMessage(Handler.java:95)
04-13 13:42:31.211: E/AndroidRuntime(2367): at android.os.Looper.loop(Looper.java:136)
04-13 13:42:31.211: E/AndroidRuntime(2367): at android.app.ActivityThread.main(ActivityThread.java:5017)
04-13 13:42:31.211: E/AndroidRuntime(2367): at java.lang.reflect.Method.invokeNative(Native Method)
04-13 13:42:31.211: E/AndroidRuntime(2367): at java.lang.reflect.Method.invoke(Method.java:515)
04-13 13:42:31.211: E/AndroidRuntime(2367): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-13 13:42:31.211: E/AndroidRuntime(2367): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-13 13:42:31.211: E/AndroidRuntime(2367): at dalvik.system.NativeStart.main(Native Method)

0 comments:

Post a Comment