2012-03-17 79 views
1

我在Android的環境中使用的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在模擬器上? adapterclass必須充氣2佈局.. – Navaneeth 2012-03-17 18:34:11

+0

你在哪裏做的?我沒有在你的代碼/佈局中看到它。 – MByD 2012-03-17 18:36:11

0

如果您單擊使用第一個佈局的第一行,則et2不存在,並且會拋出NullPointerException。

我勸你的名字你的EditText的一樣,這將允許您訪問他們一行爲準單擊

+0

但我點擊ListView外的一個按鈕來訪問EditiTexts – Navaneeth 2012-03-17 18:36:44

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類兩次(每個listView一個)

+0

gui的數據變得越來越醜陋...但它的工作原理 – Navaneeth 2012-03-17 20:15:03

+0

我現在它,所以如果它的工作接受答案 – 2012-03-17 22:34:58

相關問題