There is an error occurring in an app of mine when I set an Adapter to a ListView. Upon removing the 60/61 line of code (mainListViewTip/Hour.setAdapter(tip/hourAdapter);
), the application runs perfectly, except since the adapter is never set, no data appears in the ListView. The goal is for the values of the EditText fields to become new values in the String to be displayed in a ListView along with previous entries also.
The TipBookActivity code:
public class TipBookActivity extends Activity {
/** Called when the activity is first created. */
TextView textTip,textHour,textWage;
EditText editHour,editTip;
float wage;
int precision = 100;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textTip = (TextView) findViewById(R.id.tvTip);
textHour = (TextView) findViewById(R.id.tvHour);
textWage = (TextView) findViewById(R.id.tvWage);
editTip = (EditText) findViewById(R.id.etTip);
editHour = (EditText) findViewById(R.id.etHour);
}
public void myClickHandler (View v){
Button bSubmit = (Button) findViewById(R.id.bSubmit);
bSubmit.isClickable();
ListView mainListViewTip = (ListView) findViewById(R.id.mainListViewTip);
ListView mainListViewHour = (ListView) findViewById(R.id.mainListViewHour);
switch(v.getId()){
case R.id.bSubmit:
if(bSubmit.isPressed()){
wage = Float.parseFloat(editTip.getText().toString()) / Float.parseFloat(editHour.getText().toString());
String tip = String.format("$%.2f",wage);
textWage.setText(String.valueOf(tip) + " an hour");
textHour.setText(editHour.getText() + " Hour(s)");
textTip.setText("$" + editTip.getText());
String[] sTip = new String[] {editTip.getText().toString()};
String[] sHour = new String[] {editHour.getText().toString()};
ArrayAdapter<String> tipAdapter = new ArrayAdapter<String>(TipBookActivity.this,R.layout.main,R.id.rowTextView,sTip);
ArrayAdapter<String> hourAdapter = new ArrayAdapter<String>(TipBookActivity.this,R.layout.main,R.id.rowTextView,sHour);
mainListViewTip.setAdapter(tipAdapter);
mainListViewHour.setAdapter(hourAdapter);
Toast displayWage = Toast.makeText(this, "$" + editTip.getText() + " over " + editHour.getText() + " hour(s) for a wage of $" + wage + " an hour.", Toast.LENGTH_LONG);
displayWage.show();
}
}
}
public boolean onCreateOptionsMenu(Menu menu){
super.onCreateOptionsMenu(menu);
MenuInflater mMain = getMenuInflater();
mMain.inflate(R.menu.main_menu,menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item){
ViewFlipper vf = (ViewFlipper) findViewById(R.id.vfMain);
switch (item.getItemId()){
case R.id.menuHistory:
vf.setAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_in_right));
vf.showNext();
return true;
case R.id.menuClear:
//set up next tutorials
Toast displayClear = Toast.makeText(this, "Clear History feature coming soon.", Toast.LENGTH_SHORT);
displayClear.show();
return true;
case R.id.menuSettings:
Toast displaySettings = Toast.makeText(this, "Settings Options coming soon.", Toast.LENGTH_SHORT);
displaySettings.show();
return true;
}
return false;
}
public void onBackPressed() {
finish();
}
}
The main xml file:
<?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"
android:id="@+id/llMain" >
<ViewFlipper
android:id="@+id/vfMain"
android:layout_height="match_parent"
android:layout_width="match_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/rletbtv">
<EditText
android:id="@+id/etTip"
android:layout_height="wrap_content"
android:layout_width="140dp"
android:hint="Tips"
android:layout_margin="8dp"
android:inputType="numberDecimal"
android:layout_alignParentLeft="true"/>
<EditText
android:id="@+id/etHour"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:hint="Hours"
android:layout_margin="8dp"
android:inputType="numberDecimal"
android:layout_alignParentRight="true"
android:layout_toRightOf="@id/etTip"/>
<Button
android:id="@+id/bSubmit"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_margin="8dp"
android:ems="10"
android:text="Submit"
android:textSize="22sp"
android:layout_below="@id/etTip"
android:onClick="myClickHandler"/>
<TextView
android:id="@+id/tvTip"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Tips"
android:textSize="22sp"
android:layout_margin="8dp"
android:layout_below="@id/bSubmit"/>
<TextView
android:id="@+id/tvHour"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Hours"
android:textSize="22sp"
android:layout_margin="8dp"
android:layout_below="@id/bSubmit"
android:layout_toRightOf="@id/tvTip"/>
<TextView
android:id="@+id/tvWage"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Wage"
android:textSize="22sp"
android:layout_margin="8dp"
android:layout_below="@id/bSubmit"
android:layout_toRightOf="@id/tvHour"/>
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="50"
android:id="@+id/mainListViewTip"/>
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="50"
android:id="@+id/mainListViewHour"/>
</LinearLayout>
</ViewFlipper>
</LinearLayout>
The simplerow xml file:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rowTextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:textSize="16sp" />
The logcat error report:
FATAL EXCEPTION: main
java.lang.NullPointerException
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:353)
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
at android.widget.AbsListView.obtainView(AbsListView.java:1315)
at android.widget.ListView.measureHeightOfChildren(ListView.java:1198)
at android.widget.ListView.onMeasure(ListView.java:1109)
at android.view.View.measure(View.java:8171)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1012)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:381)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
at android.view.View.measure(View.java:8171)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
at android.view.View.measure(View.java:8171)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1012)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:381)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
at android.view.View.measure(View.java:8171)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
at android.view.View.measure(View.java:8171)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:526)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
at android.view.View.measure(View.java:8171)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
at android.view.View.measure(View.java:8171)
at android.view.ViewRoot.performTraversals(ViewRoot.java:801)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)