Я пишу небольшое приложение, использующее ListView в среде Android
Я написал основной файл макета следующим образом
<?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();
}
}
Исключение NullPointerException происходит при использовании метода onclick() при доступе к et2, и при доступе к 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 ^
Вы должны иметь условие, которое используется, и ссылаться только на один из них.
Сначала добавьте второй 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)
Если вы нажмете на первую строку, которая использует первый макет, et2 не существует и будет вызывать исключение NullPointerException.
Я бы посоветовал вам назвать ваш EditText тем же, что позволит вам получить к ним доступ в зависимости от того, какую строку вы нажимаете