无法将 alertDialog 项目设置为列表视图项目
Failed to set alertDialog item into listview item
每个列表视图项内有 2 个文本视图,第一个用于列表项,第二个用于选择。我真正需要的是在每个列表视图中将第二个 textView 设置为与选择 selected 相同并保存其值。当我在“ItemSelected 5”上select并选择“Choice 3”时,它会在列表视图中给我:
ItemSelected 5
Choice 3
它的值为0.75。
我的问题是当我在“ItemSelected 6”中 select 并选择“Choice 4”时,它强制关闭。这是 LogCat
08-06 23:13:18.742: E/AndroidRuntime(860): FATAL EXCEPTION: main
08-06 23:13:18.742: E/AndroidRuntime(860): java.lang.NullPointerException
08-06 23:13:18.742: E/AndroidRuntime(860): at id.app.diagnosagangguankehamilan.GejalaPilih.onClick(GejalaPilih.java:59) //Here is refer to (*_*)
08-06 23:13:18.742: E/AndroidRuntime(860): at com.android.internal.app.AlertController$AlertParams.onItemClick(AlertController.java:941)
08-06 23:13:18.742: E/AndroidRuntime(860): at android.widget.AdapterView.performItemClick(AdapterView.java:298)
08-06 23:13:18.742: E/AndroidRuntime(860): at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
08-06 23:13:18.742: E/AndroidRuntime(860): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2788)
08-06 23:13:18.742: E/AndroidRuntime(860): at android.widget.AbsListView.run(AbsListView.java:3463)
08-06 23:13:18.742: E/AndroidRuntime(860): at android.os.Handler.handleCallback(Handler.java:730)
08-06 23:13:18.742: E/AndroidRuntime(860): at android.os.Handler.dispatchMessage(Handler.java:92)
08-06 23:13:18.742: E/AndroidRuntime(860): at android.os.Looper.loop(Looper.java:137)
08-06 23:13:18.742: E/AndroidRuntime(860): at android.app.ActivityThread.main(ActivityThread.java:5103)
08-06 23:13:18.742: E/AndroidRuntime(860): at java.lang.reflect.Method.invokeNative(Native Method)
08-06 23:13:18.742: E/AndroidRuntime(860): at java.lang.reflect.Method.invoke(Method.java:525)
08-06 23:13:18.742: E/AndroidRuntime(860): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
08-06 23:13:18.742: E/AndroidRuntime(860): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-06 23:13:18.742: E/AndroidRuntime(860): at dalvik.system.NativeStart.main(Native Method)
这是我的代码:
final Double[] value = new Double[25];
//After OnCreate
String[] listItem = {“ItemSelected 1”,”ItemSelected 2”,”ItemSelected 3”,”ItemSelected 4”,”ItemSelected 5”,”ItemSelected 6”,…,”ItemSelected 30”};
final ListView listView = (ListView)findViewById(R.id.listViewItemSelected);
ArrayAdapter<String> adapter = new GejalaPilihAdapter(this, listItem);
listView.setAdapter(adapter);
listView.setOnItemSelectedClickListener(new OnItemSelectedClickListener() {
@Override
public void onItemSelectedClick(AdapterView<?> arg0, View arg1, final int position,long arg3) {
final CharSequence[] choice = {"Choice 1","Choice 2","Choice 3","Choice 4"};
AlertDialog.Builder alert = new AlertDialog.Builder(Main.this);
alert.setIcon(R.drawable.ic_launcher);
alert.setTitle("Select Choice");
alert.setSingleChoiceItemSelecteds(choice, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int itemSelected) {
TextView textView = (TextView) listView.getChildAt(position).findViewById(R.id.textViewChoice); //(*_*)
textView.setText(choice[itemSelected]);
switch (itemSelected) {
case 0:
value[position] = 0.25;
break;
case 1:
value[position] = 0.5;
break;
case 2:
value[position] = 0.75;
break;
case 3:
value[position] = 1.0;
break;
default:
value[position] = 0.0;
break;
}
Log.d("","Choice["+position+"] = "+choice[itemSelected]);
dialog.dismiss();
}
});
AlertDialog al = alert.create();
al.show();
}
});
您不需要 listView.getChildAt(position)
因为当您单击列表视图项时,它已经显示了它的视图。检查 onItemSelectedClick()
方法中的 View arg1
参数。您可以将参数设置为 final
public void onItemSelectedClick(AdapterView<?> arg0, final View arg1, final int position,long arg3) {
并用它来获取文本视图
TextView textView = (TextView) arg1.findViewById(R.id.textViewChoice);
每个列表视图项内有 2 个文本视图,第一个用于列表项,第二个用于选择。我真正需要的是在每个列表视图中将第二个 textView 设置为与选择 selected 相同并保存其值。当我在“ItemSelected 5”上select并选择“Choice 3”时,它会在列表视图中给我:
ItemSelected 5
Choice 3
它的值为0.75。 我的问题是当我在“ItemSelected 6”中 select 并选择“Choice 4”时,它强制关闭。这是 LogCat
08-06 23:13:18.742: E/AndroidRuntime(860): FATAL EXCEPTION: main
08-06 23:13:18.742: E/AndroidRuntime(860): java.lang.NullPointerException
08-06 23:13:18.742: E/AndroidRuntime(860): at id.app.diagnosagangguankehamilan.GejalaPilih.onClick(GejalaPilih.java:59) //Here is refer to (*_*)
08-06 23:13:18.742: E/AndroidRuntime(860): at com.android.internal.app.AlertController$AlertParams.onItemClick(AlertController.java:941)
08-06 23:13:18.742: E/AndroidRuntime(860): at android.widget.AdapterView.performItemClick(AdapterView.java:298)
08-06 23:13:18.742: E/AndroidRuntime(860): at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
08-06 23:13:18.742: E/AndroidRuntime(860): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2788)
08-06 23:13:18.742: E/AndroidRuntime(860): at android.widget.AbsListView.run(AbsListView.java:3463)
08-06 23:13:18.742: E/AndroidRuntime(860): at android.os.Handler.handleCallback(Handler.java:730)
08-06 23:13:18.742: E/AndroidRuntime(860): at android.os.Handler.dispatchMessage(Handler.java:92)
08-06 23:13:18.742: E/AndroidRuntime(860): at android.os.Looper.loop(Looper.java:137)
08-06 23:13:18.742: E/AndroidRuntime(860): at android.app.ActivityThread.main(ActivityThread.java:5103)
08-06 23:13:18.742: E/AndroidRuntime(860): at java.lang.reflect.Method.invokeNative(Native Method)
08-06 23:13:18.742: E/AndroidRuntime(860): at java.lang.reflect.Method.invoke(Method.java:525)
08-06 23:13:18.742: E/AndroidRuntime(860): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
08-06 23:13:18.742: E/AndroidRuntime(860): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-06 23:13:18.742: E/AndroidRuntime(860): at dalvik.system.NativeStart.main(Native Method)
这是我的代码:
final Double[] value = new Double[25];
//After OnCreate
String[] listItem = {“ItemSelected 1”,”ItemSelected 2”,”ItemSelected 3”,”ItemSelected 4”,”ItemSelected 5”,”ItemSelected 6”,…,”ItemSelected 30”};
final ListView listView = (ListView)findViewById(R.id.listViewItemSelected);
ArrayAdapter<String> adapter = new GejalaPilihAdapter(this, listItem);
listView.setAdapter(adapter);
listView.setOnItemSelectedClickListener(new OnItemSelectedClickListener() {
@Override
public void onItemSelectedClick(AdapterView<?> arg0, View arg1, final int position,long arg3) {
final CharSequence[] choice = {"Choice 1","Choice 2","Choice 3","Choice 4"};
AlertDialog.Builder alert = new AlertDialog.Builder(Main.this);
alert.setIcon(R.drawable.ic_launcher);
alert.setTitle("Select Choice");
alert.setSingleChoiceItemSelecteds(choice, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int itemSelected) {
TextView textView = (TextView) listView.getChildAt(position).findViewById(R.id.textViewChoice); //(*_*)
textView.setText(choice[itemSelected]);
switch (itemSelected) {
case 0:
value[position] = 0.25;
break;
case 1:
value[position] = 0.5;
break;
case 2:
value[position] = 0.75;
break;
case 3:
value[position] = 1.0;
break;
default:
value[position] = 0.0;
break;
}
Log.d("","Choice["+position+"] = "+choice[itemSelected]);
dialog.dismiss();
}
});
AlertDialog al = alert.create();
al.show();
}
});
您不需要 listView.getChildAt(position)
因为当您单击列表视图项时,它已经显示了它的视图。检查 onItemSelectedClick()
方法中的 View arg1
参数。您可以将参数设置为 final
public void onItemSelectedClick(AdapterView<?> arg0, final View arg1, final int position,long arg3) {
并用它来获取文本视图
TextView textView = (TextView) arg1.findViewById(R.id.textViewChoice);