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.

其他提示

I don't see any where you initializing ListView details; and you have

details.setAdapter(new SimpleAdapter(this, arraylist, R.layout.mylayout, new String[] {CT.USER_NAME}, new int[] {R.id.textView1, R.id.btndetails}));

So initialize details.

details = (ListView)findViewById(R.id.regsdisplay);

Also listview is in activity_home.xml but i do no see EditText and Button in the same.

You have Button in mylayout.xml not in activity_home.xml

<Button
    android:id="@+id/btndetails"

Either you posted a incomplete layout or you messed up while referencing the ids for the inflated layout.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top