Android 2.3.3、MinSDK = 8
各行に CustomView (Image、2 つのテキストビュー、1 つのチェックボックス) を備えた ListView があります。「連絡先を追加」というボタンがあります。このボタンをクリックすると、チェックボックスがチェックされているかどうかがチェックされます。オンの場合、画像の値と 2 つのテキストビューを取得してデータベースに保存する必要があります。
ListView の CustomView の仕組みを知っています。ビューは、表示されるときに作成されます。では、チェックされたすべての行を取得するにはどうすればよいでしょうか?
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="100dp"
android:layout_margin="2dp"
android:orientation="horizontal" >
<ImageView
android:id="@+id/imgView_addcontact"
android:layout_width="0dip"
android:layout_height="100dp"
android:layout_weight="0.20"
android:padding="5dp"
android:src="@drawable/addcontactsmall2" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="100dp"
android:layout_gravity="center"
android:layout_weight="0.60"
android:orientation="vertical"
android:padding="5dp" >
<TextView
android:id="@+id/txtView_addcontact_contactname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Contact Name"
android:textSize="20sp" />
<TextView
android:id="@+id/txtview_addcontact_phonenumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Phone Number"
android:textSize="16sp" />
</LinearLayout>
<CheckBox
android:id="@+id/chbk_addcontact"
android:layout_width="0dp"
android:layout_height="100dp"
android:layout_weight="0.10"
android:layout_gravity="center"
android:padding="5dp" />
</LinearLayout>
これが私が試しているコードです-私は知っていますが、動作しません:::
for(int i = 0; i< lv_addcontacts.getCount(); i++)
{
View contactView = lv_addcontacts.getChildAt(i);
CheckBox contactView_chbk = (CheckBox) contactView.findViewById(R.id.chbk_addcontact);
TextView contactView_txt_contactname = (TextView) contactView.findViewById(R.id.txtView_addcontact_contactname);
TextView contactView_txt_phonenumber = (TextView) contactView.findViewById(R.id.txtview_addcontact_phonenumber);
if(contactView_chbk.isChecked())
{
System.out.println("Contact Name = " + contactView_txt_contactname.getText().toString());
System.out.println("Phone Number = " + contactView_txt_phonenumber.getText().toString());
System.out.println("CheckBox Status = Checked");
System.out.println("");
}
else
{
System.out.println("Contact Name = " + contactView_txt_contactname.getText().toString());
System.out.println("Phone Number = " + contactView_txt_phonenumber.getText().toString());
System.out.println("CheckBox Status = Not Checked");
System.out.println("");
}
}
そして、私が得る例外:::
//出力
04-08 12:28:47.539: I/System.out(3244): Contact Name = Self Help
04-08 12:28:47.539: I/System.out(3244): Phone Number = *111#
04-08 12:28:47.539: I/System.out(3244): CheckBox Status = Not Checked
04-08 12:28:47.539: I/System.out(3244): Contact Name = Bonus Cards
04-08 12:28:47.539: I/System.out(3244): Phone Number = *444#
04-08 12:28:47.539: I/System.out(3244): CheckBox Status = Checked
04-08 12:28:47.539: I/System.out(3244): Contact Name = Annaya
04-08 12:28:47.539: I/System.out(3244): Phone Number = +1xxxx
04-08 12:28:47.539: I/System.out(3244): CheckBox Status = Not Checked
// 例外
04-08 12:28:47.539: W/dalvikvm(3244): threadid=1: thread exiting with uncaught exception (group=0x401be560)
04-08 12:28:47.539: E/AndroidRuntime(3244): FATAL EXCEPTION: main
04-08 12:28:47.539: E/AndroidRuntime(3244): java.lang.NullPointerException
04-08 12:28:47.539: E/AndroidRuntime(3244): at com.xxx.xx.Class_Add_Contact.onClick(Class_Add_Contact.java:277)
04-08 12:28:47.539: E/AndroidRuntime(3244): at android.view.View.performClick(View.java:2485)
04-08 12:28:47.539: E/AndroidRuntime(3244): at android.view.View$PerformClick.run(View.java:9080)
04-08 12:28:47.539: E/AndroidRuntime(3244): at android.os.Handler.handleCallback(Handler.java:587)
04-08 12:28:47.539: E/AndroidRuntime(3244): at android.os.Handler.dispatchMessage(Handler.java:92)
04-08 12:28:47.539: E/AndroidRuntime(3244): at android.os.Looper.loop(Looper.java:130)
04-08 12:28:47.539: E/AndroidRuntime(3244): at android.app.ActivityThread.main(ActivityThread.java:3687)
04-08 12:28:47.539: E/AndroidRuntime(3244): at java.lang.reflect.Method.invokeNative(Native Method)
04-08 12:28:47.539: E/AndroidRuntime(3244): at java.lang.reflect.Method.invoke(Method.java:507)
04-08 12:28:47.539: E/AndroidRuntime(3244): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
04-08 12:28:47.539: E/AndroidRuntime(3244): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
04-08 12:28:47.539: E/AndroidRuntime(3244): at dalvik.system.NativeStart.main(Native Method)
ビューがまだ作成されていないため、例外が発生しています。しかし、リスト全体でチェックされた値を取得するにはどうすればよいですか。
編集 :::
チェックボックスに onCheckedChange() を実装することを選択した場合、現在チェックされているチェックボックスの ListView アイテムを onCheckedChange() メソッド内で取得するにはどうすればよいですか?
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// TODO Auto-generated method stub
if(isChecked)
{
// How do I get the View(CustomView of ListView) to access the textViews and ImageView?
}
}