我正在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;
}
我以以下方式编写布局文件
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();
}
}
访问et2时,onclick()方法中出现NullPointerException,访问et1时没有问题
请帮帮我!提前感谢:)
您只膨胀了一个布局,但在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 ^
你需要有一个使用的条件,并且只引用其中一个。
如果单击使用第一个布局的第一行,则et2不存在,并将抛出NullPointerException。
我建议您将EditText的名称命名为相同的,这将允许您访问您单击的任何一行
首先在main.xml 中添加第二个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"/>
<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一次)