2014-01-26 3 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

NSA блокирует вас. '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 (новый SimpleAdapter (это, arraylist, R.layout.mylayout, новый String [] {CT.USER_NAME, "View Details"}, новый int [] {R.id.textView1, R.id.btndetails})); – Saggy

+0

Нет, нет данных «View Details» в источнике. Вам не нужно отображать данные из источника в статическую кнопку. Просто имейте это, как в макете строк. – laalto

+0

Не получил тебя лаальто. – 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, но я не вижу EditText и Button в то же самое.

Вы имеете кнопку в mylayout.xml не в activity_home.xml

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

Либо вы разместили неполный макет или перепутался в то время как ссылки на идентификаторы для надутого макета.

+0

На самом деле, я создал этот настраиваемый макет, чтобы объединить два вида, то есть TextView и Button. Итак, я определил их в mylayout.xml и использовал то же самое в simpleAdapter at HomeActivity.java, где я определил ListView для отображения содержимого mylayout.xml – Saggy

+0

. Я инициализировал данные ListView сейчас и все еще встречаюсь с отредактированной ошибкой в ​​сообщении , – Saggy

+0

@ Неправильная инициализация кнопок и edittext. для arrayindexoutofboundexception laalto ответ дает вам решение – Raghunandan

Смежные вопросы