2012-03-17 3 views
1

Я пишу небольшое приложение, с помощью ListView в андроида среде
я написал главный layoutfile следующим образомNullPointerException Android ListView

 <?xml version="1.0" encoding="utf-8"?> 

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" android:padding="1dp" android:orientation="vertical"> 

    <ListView android:id="@+id/lv1" android:layout_width="fill_parent" android:layout_height="0dp" 
android:layout_weight="1"/> 

<RelativeLayout android:id="@+id/ll5" android:background="#C5C1AA" android:layout_width="fill_parent" android:layout_height="wrap_content"> 
<Button android:paddingLeft="30dp" android:paddingRight="30dp" android:id="@+id/bt1" android:text="save" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_marginLeft="15dp" android:layout_marginTop="10dp" android:onClick="onclick"/> 
<Button android:paddingLeft="30dp" android:paddingRight="30dp" android:id="@+id/bt2" android:text="cancel" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_alignParentRight="true" android:layout_marginRight="15dp" android:layout_marginTop="10dp" android:onClick="onclick2"/> 
</RelativeLayout> 

</LinearLayout> 


Я написал класс адаптера и реализован метод GetView() в следующим образом

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
switch (position) { 
case 0: 
    convertView = inflater.inflate(R.layout.list1, null); 
    break; 
case 1: 
    convertView=inflater.inflate(R.layout.list2,null); 
    break; 
default: 
    break; 
} 

return convertView; 
} 

Я написал layoutfiles следующим образом

list1.xml

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent"> 

    <TextView android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:text="Alarm name:" 
     android:textSize="15dp" 
     android:id="@+id/tv3" 
     android:layout_margin="5dp"/> 
    <EditText android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:layout_below="@id/tv3" 
     android:id="@+id/et1" 
     android:singleLine="true" 
     android:layout_margin="5dp"/> 

    </RelativeLayout> 

list2.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent"> 

    <TextView android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:layout_margin="5dp" 
     android:text="Password:" 
     android:textSize="15dp" 
     android:id="@+id/tv4"/> 

    <EditText android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:layout_below="@id/tv4" 
     android:id="@+id/et2" 
     android:layout_margin="5dp" 
     android:singleLine="true"/> 

     </RelativeLayout> 

Я написал метод OnClick следующим образом ...

public void onclick(View v) 
{ 
    try{ 
     EditText et=(EditText)findViewById(R.id.et1); 
     String s1=et.getText().toString(); 
     if(s1.equals(""))s1="no name"; 
     Toast.makeText(getApplicationContext(), s1,Toast.LENGTH_SHORT).show(); 
     EditText et2=(EditText)findViewById(R.id.et2); 
     String s2=et2.getText().toString(); 
     if(s2.equals(""))s2="no password"; 
     Toast.makeText(getApplicationContext(), s2,Toast.LENGTH_SHORT).show(); 
     } 
    catch(Exception e) 
    { 
     Toast.makeText(getApplicationContext(), e.toString(),Toast.LENGTH_LONG).show(); 
    } 

} 

NullPointerException происходит в OnClick() метод при доступе к et2 и не было проблем при доступе к et1
, пожалуйста, помогите мне! заранее спасибо :)

ответ

2

Вы надувать только один макет, но в onClick() обращении к полям из обоих:

EditText et=(EditText)findViewById(R.id.et); 
//      first one^
String s1=et.getText().toString(); 
if(s1.equals(""))s1="no name"; 
Toast.makeText(getApplicationContext(), s1,Toast.LENGTH_SHORT).show(); 
EditText et2=(EditText)findViewById(R.id.et2); 
//      second one^

Вы должны иметь условие, которое используется один, и относятся только к одному из них.

+0

Если я раздуваю только один макет, как я могу видеть как edittexts на эмуляторе ??? адаптер должен раздувать 2 макета .. – Navaneeth

+0

Где вы это делаете? Я не вижу его в вашем коде/макете. – MByD

0

Если вы нажмете на первую строку, которая использует первый макет, et2 не существует и будет вызывать исключение NullPointerException.

Я бы посоветовал вам назвать ваш EditText тот же самый, что позволит им получить доступ к какой бы ни строки вы щелкаете

+0

Но я нажимаю кнопку за пределами ListView для доступа к данным из EditiTexts – Navaneeth

0

Сначала добавьте второй ListView к вы main.xml

<?xml version="1.0" encoding="utf-8"?> 

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" android:padding="1dp" android:orientation="vertical"> 

    <ListView android:id="@+id/lv1" android:layout_width="fill_parent" android:layout_height="0dp" 
android:layout_weight="1"/> 
<ListView android:id="@+id/lv2" android:layout_width="fill_parent" android:layout_height="0dp" 
android:layout_weight="1"/> 
    <RelativeLayout android:id="@+id/ll5" android:background="#C5C1AA" android:layout_width="fill_parent" android:layout_height="wrap_content"> 
    <Button android:paddingLeft="30dp" android:paddingRight="30dp" android:id="@+id/bt1" android:text="save" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_marginLeft="15dp" android:layout_marginTop="10dp" android:onClick="onclick"/> 
    <Button android:paddingLeft="30dp" android:paddingRight="30dp" android:id="@+id/bt2" android:text="cancel" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_alignParentRight="true" android:layout_marginRight="15dp" android:layout_marginTop="10dp" android:onClick="onclick2"/> 
    </RelativeLayout> 
    </LinearLayout> 

Во-вторых, tou нужно раздуть каждый listView, поэтому в вашем методе getView вам нужно убедиться, что вы вызываете класс getView два раза (по одному для каждого спискаView).

+0

gui становится уродливым ... но он работает – Navaneeth

+0

Теперь я его, так что если он работает, признайте ответ –

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