ボタンを含むリストビューを使用しているアクティビティで、非常に奇妙な問題が発生しています。リストビュー内のボタンを使用している奇妙なIndexOUBException
このエラーはランダムに表示されるようですが(実際には存在しないことは分かっていますが)、エラーを再現するために定義されたパターンを得ることはできません。それはちょうど毎回起こります。
私がこれを理解しようとしている大きな問題は、logCatが自分のコードにエラーを表示していないことです。ちょうどそのコードがアンドロイドでクリックが発生しているビューを特定するために使用します。 android/javaに属していないパッケージはエラーに言及されていないことに注意してください。
LogCat:
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): FATAL EXCEPTION: main
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): java.lang.IndexOutOfBoundsException
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at java.util.Arrays$ArrayList.get(Arrays.java:77)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:298)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:351)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.widget.Spinner.makeAndAddView(Spinner.java:189)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.widget.Spinner.layout(Spinner.java:148)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.widget.Spinner.onLayout(Spinner.java:112)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.view.View.layout(View.java:7032)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.widget.LinearLayout.onLayout(LinearLayout.java:1042)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.view.View.layout(View.java:7032)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1238)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.widget.LinearLayout.onLayout(LinearLayout.java:1044)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.view.View.layout(View.java:7032)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.widget.LinearLayout.onLayout(LinearLayout.java:1042)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.view.View.layout(View.java:7032)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.view.View.layout(View.java:7032)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.widget.LinearLayout.onLayout(LinearLayout.java:1042)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.view.View.layout(View.java:7032)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.view.View.layout(View.java:7032)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.view.ViewRoot.performTraversals(ViewRoot.java:1055)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.view.ViewRoot.handleMessage(ViewRoot.java:1737)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.os.Handler.dispatchMessage(Handler.java:99)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.os.Looper.loop(Looper.java:123)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at android.app.ActivityThread.main(ActivityThread.java:4627)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at java.lang.reflect.Method.invokeNative(Native Method)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at java.lang.reflect.Method.invoke(Method.java:521)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-14 12:04:20.994: ERROR/AndroidRuntime(5619): at dalvik.system.NativeStart.main(Native Method)
ここに私のカスタムArrayAdapterコードは、私はしっかりとそれらをクリックして、ほとんど場合、私は、繰り返し様々な行から様々な「boton_modificar」をクリックしたときにエラーが発生し、あります。
private class CustomAdapter extends ArrayAdapter<DataType> {
public CustomAdapter(Context context, int resource,List<DataType> objects) {
super(context, resource, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
final int position2 = position;
if (row == null) {
LayoutInflater inflater = getLayoutInflater();
row = inflater.inflate(R.layout.row_layout,parent,false);
}
//Some more code here
ImageButton boton_modificar = (ImageButton) row.findViewById(R.id.modificar);
boton_modificar.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
DataT t = tr.get(position2);
((EditText) (findViewById(R.id.monto))).setText(Double.toString(t.m));
((Spinner) (findViewById(R.id.spinnerTipoB))).setSelection(t.posSTB);
((Spinner) (findViewById(R.id.spinnerB))).setSelection(t.posSB);
}
});
return (row);
}
}
anybodeはこれが何であるかを少し考えていますか?私はこれを何とか理解しようと疲れました。ほとんどの私は、同様の問題のバグレポートでしたが、私はその同じことを疑う、事前にどのような場合でthe report is here.
おかげで、ステファノ
編集:ちょうどエラーポップ前の
LogCatポジションセットと何か関係があるのか疑問に思う。
12-16 15:12:56.159: INFO/position2(21828): 7
12-16 15:12:56.159: INFO/Spinner A # elements:(21828): 3
12-16 15:12:56.159: INFO/Assigned position(21828): 1
12-16 15:12:56.159: INFO/Spinner B # elements:(21828): 20
12-16 15:12:56.159: INFO/Assigned position(21828): 5
追加コード:
spinnerTipoB.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int position, long arg3) {
int posId = tipoBIds[position];
if (posId == 0) {
spinnerB.setAdapter(arrayAdapterBP);
} else if (posId == 1) {
spinnerB.setAdapter(arrayAdapterBT);
} else if (posId == 2) {
spinnerB.setAdapter(arrayAdapterBO);
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// Do Nothing
}
});
spinnerB
はセレクト位置に何もしません。 spinnerB.setAdapter(arrayAdapterNAME)
が行われる前に((Spinner) (findViewById(R.id.spinnerB))).setSelection(t.posSB);
が実行されるので、私はエラーocurrsを推定でしょう
arrayAdapterNAME = new ArrayAdapter<String>(this, R.layout.layoutspinner, DATA);
: すべてのスピナー・アレイ・アダプタは、このように作成されますか?
どこにもヘッダーとフッターがありません。 'tr'はArrayListであり、データはそこにあり、NPEを取得していません。私のコードは、それがクラッシュすると、その行に到達することさえないので、clickListenerを入力する前にそれを行います。 – blindstuff
'onClick'メソッド内の' position2'が 'LogCat'にログすることによって適切な整数値であることを確認してください。 2つの 'setSelection'メソッド呼び出しの近くに問題があるように見えます。 – binnyb
'position2'は、この' getView'メソッドの内部にある 'onClick'イベントメソッドの中で内部からアクセスされているので、あなたが思っているものではないと感じています。私は自分自身のプロジェクトでこの問題を回避しましたが、もしあなたが 'position2'が期待通りではないことが分かったら教えてください – binnyb