Creating a simple registration form and storing the values in database. The data stored should be displayed on Home page after user finishes registration. On home page, I created a ListView in which on a row I want to show username given by user along with a button adjacent to it and on click of that button user should able to see the registration entries on another page.
For this I tried using simpleAdapter but that I guess didn't worked or not properly programmed. I also thought to use Expandable ListView but do not know how to use it.
Please, just help me with your suggestion to display the content of the Registration on View and the how to perform a click event on button inserted in ListView.
My codes are:
HomeActivity.java
package com.nsa.project;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.SubMenu;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class HomeActivity extends Activity {
Button btnDetails;
EditText edtusername;
ListView details;
ArrayList<HashMap<String, String>> arraylist = new ArrayList<HashMap<String, String>>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
edtusername = (EditText) findViewById(R.id.edtuser);
btnDetails = (Button) findViewById(R.id.btndetails);
details = (ListView) findViewById(R.id.regsdisplay);
}
public void displayDetails()
{
DataBase d = new DataBase(HomeActivity.this);
arraylist = d.readDetails();
//Expandable ListView
details.setAdapter(new SimpleAdapter(this, arraylist, R.layout.mylayout, new String[] {CT.USER_NAME}, new int[] {R.id.textView1, R.id.btndetails}));
}
@Override
public void onResume()
{
// TODO Auto-generated method stub
super.onResume();
displayDetails();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
int groupId = 0;
int order = 0;
int itemId = 0 ;
String title = "My menu";
// Inflate the menu; this adds items to the action bar if it is present.
menu.add(title);
MenuItem mNext = menu.add(groupId, itemId, order, " New User").setIcon(R.drawable.add_user);
mNext.setOnMenuItemClickListener(new OnMenuItemClickListener(){
@Override
public boolean onMenuItemClick(MenuItem item) {
// TODO Auto-generated method stub
Intent in = new Intent(HomeActivity.this, Registration.class);
startActivity(in);
return false;
}
});
MenuItem mExit = menu.add(groupId, itemId+1, order+1, "Exit").setIcon(R.drawable.exit);
mExit.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
// TODO Auto-generated method stub
finish();
return false;
}
});
SubMenu sb = menu.addSubMenu("Create User");
sb.add(groupId, itemId, order, "First");
sb.add(groupId, itemId+1, order+1, "2");
return true;
}
}
Now, Layouts are
activity_home.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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".HomeActivity" >
<ListView
android:id="@+id/regsdisplay"
android:layout_width="match_parent"
android:layout_height="wrap_content"></ListView>
</RelativeLayout>
mylayout.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/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginTop="22dp"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#CCBBAA" />
<Button
android:id="@+id/btndetails"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textColor="#FFAAFF"
android:text="View Details"></Button>
</LinearLayout>
LOgcat Error
01-26 23:11:42.643: E/AndroidRuntime(410): FATAL EXCEPTION: main
01-26 23:11:42.643: E/AndroidRuntime(410): java.lang.ArrayIndexOutOfBoundsException
01-26 23:11:42.643: E/AndroidRuntime(410): at android.widget.SimpleAdapter.bindView(SimpleAdapter.java:160)
01-26 23:11:42.643: E/AndroidRuntime(410): at android.widget.SimpleAdapter.createViewFromResource(SimpleAdapter.java:126)
01-26 23:11:42.643: E/AndroidRuntime(410): at android.widget.SimpleAdapter.getView(SimpleAdapter.java:114)
01-26 23:11:42.643: E/AndroidRuntime(410): at android.widget.AbsListView.obtainView(AbsListView.java:1315)
01-26 23:11:42.643: E/AndroidRuntime(410): at android.widget.ListView.measureHeightOfChildren(ListView.java:1198)
01-26 23:11:42.643: E/AndroidRuntime(410): at android.widget.ListView.onMeasure(ListView.java:1109)
01-26 23:11:42.643: E/AndroidRuntime(410): at android.view.View.measure(View.java:8171)
01-26 23:11:42.643: E/AndroidRuntime(410): at android.widget.RelativeLayout.measureChild(RelativeLayout.java:563)
01-26 23:11:42.643: E/AndroidRuntime(410): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:378)
01-26 23:11:42.643: E/AndroidRuntime(410): at android.view.View.measure(View.java:8171)
01-26 23:11:42.643: E/AndroidRuntime(410): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
01-26 23:11:42.643: E/AndroidRuntime(410): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
01-26 23:11:42.643: E/AndroidRuntime(410): at android.view.View.measure(View.java:8171)
01-26 23:11:45.684: I/Process(410): Sending signal. PID: 410 SIG: 9
The ListView details
is not initialized. Add the following after setContentView()
in onCreate()
:
details = (ListView)findViewById(R.id.regsdisplay);
The follow-up ArrayIndexOfBoundException
comes here:
details.setAdapter(new SimpleAdapter(this, arraylist, R.layout.mylayout, new String[] {CT.USER_NAME}, new int[] {R.id.textView1, R.id.btndetails}));
There's only one from
column name and two to
view identifiers.