2014-01-26 113 views
-3

创建一个简单的注册表单并将值存储在数据库中。在用户完成注册后,存储的数据应显示在主页上。在主页上,我创建了一个ListView,在该列表中,我想要显示用户给出的用户名以及与其相邻的按钮,点击该按钮后,用户应该能够在另一个页面上看到注册条目。在ListView中显示内容

为此,我尝试使用simpleAdapter,但我猜测没有工作或没有正确编程。我也想过使用Expandable ListView,但不知道如何使用它。

请帮助我,建议您显示注册视图的内容以及如何在插入ListView的按钮上执行点击事件。

我的代码是:

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; 
    } 
} 

现在,布局是

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的错误

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 
+2

国家安全局阻止你。 'com.nsa'是一个“保留”的软件包名称... – Emmanuel

+1

减少你的代码并发布相关部分 – Raghunandan

+0

@Emmanuel:这是我自己的软件包名称。反正它怎么阻挡? – Saggy

回答

2

ListView details未初始化。添加以下setContentView()onCreate()后:

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

后续ArrayIndexOfBoundException来到这里:

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

这里只有一个from列名和两个to视图标识符。

+0

好吧,我明白了。但是,我只想在ListView上显示一个按钮和用户名,所以这个工作吗? details.setAdapter(new SimpleAdapter(this,arraylist,R.layout.mylayout,new String [] {CT.USER_NAME,“View Details”},new int [] {R.id.textView1,R.id.btndetails}) ); – Saggy

+0

不,源中没有“查看详情”数据。您不需要将来源的任何数据映射到静态按钮。就像在行布局中一样。 – laalto

+0

没有得到你laalto。 – Saggy

2

我没有看到任何地方你初始化ListView details;,你有

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

所以初始化details

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

同样的ListView是activity_home.xml但我没有看到在同一EditTextButton

你必须在按键不mylayout.xmlactivity_home.xml

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

要么你贴了不完整的布局,或者你搞砸了,而引用的ID为膨胀的布局。

+0

实际上,我创建了这个自定义布局来合并两个视图,即TextView和Button。所以,我在mylayout.xml中定义了它们,并在HomeAdvanced.java的simpleAdapter中使用了它们,我在其中定义了一个ListView来显示mylayout.xml的内容 – Saggy

+0

我已经初始化了ListView细节,并且仍然遇到了编辑后的错误。 – Saggy

+0

@Saggy初始化按钮和edittext是错误的。 arrayindexoutofboundexception laalto answer给你解决方案 – Raghunandan