Я очень зелёный разработчик Android и нуждаюсь в помощи со странным сбоем программы. Часто программа будет работать нормально. Существует равный шанс, что он потерпит неудачу (см. Стек в конце). Я могу посмотреть, как программа запускается через функцию getView, и все выглядит по порядку (т. Е. Вся информация там, как ожидалось, и проходит через convertView, казалось бы, отлично). Либо это пройдет через несколько раз, а затем программа будет A-OK или она не удастся, как показано ниже, и я не смог определить причину сбоя. Еще страннее то, что если я держу телефон в ландшафтном режиме, он никогда не потерпит неудачу !! Это происходит только около 50% времени в портретной ориентации. Может кто-нибудь, пожалуйста, помогите мне?Неправильная ориентация в ListView.layoutChildren - исключение ArrayIndexOutofBoundsException
@Override
public View getView(int position, View convertView, ViewGroup parent){
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.row, null);
}
ADDPResults addpres = items.get(position);
if (addpres != null) {
//initialize display variables from inflated row.xml variables
TextView iptext = (TextView) v.findViewById(R.id.IPtext);
TextView mactext = (TextView) v.findViewById(R.id.MACtext);
TextView nametext = (TextView) v.findViewById(R.id.Nametext);
TextView devicetext = (TextView) v.findViewById(R.id.Devicetext);
//TextView firmwaretext = (TextView) v.findViewById(R.id.Firmwaretext);
//write the real data to the display
iptext.setText("IP Address: "+addpres.addp_deviceIP.toDecString());
mactext.setText("MAC Address: "+addpres.addp_deviceMAC.toHexString());
nametext.setText("Name: "+addpres.addp_devName);
devicetext.setText("Device: "+addpres.addp_devType);
//firmwaretext.setText("Firmware: "+addpres.addp_FWVersion);
}
return v;
}
}
----------------------- Неудача ------------------- --------------------------- Тема [< 3> main] (Приостановлено (исключение ArrayIndexOutOfBoundsException)) ListView.layoutChildren(): 1686 ListView (AbsListView) .onLayout (boolean, int, int, int, int): 1224 ListView (View) .layout (int, int, int, int): 6886 LinearLayout.setChildFrame (View, int, int, int, int): 1119 LinearLayout.layoutVertical() line: 998 LinearLayout.onLayout (boolean, int, int, int, int) строка: 918 LinearLayout (View) .layout (int , int, int, int) строка: 6886 FrameLayout.onLayout (boolean, int, int, int, int) строка: 333 FrameLayout (View) .layout (int, int, int, int) строка: 6886 LinearLayout. setChildFrame (View, int, int, int, int) line: 1119 LinearLayout.layoutVertical() line: 998 LinearLayout.onLayout (boolean, int, int, int, int) строка: 918 LinearLayout (View) .layout (int, int, int, int): 6886 PhoneWindow $ DecorView (FrameLayout) .onLayout (строка boolean, int, int, int, int): 333 PhoneWindow $ DecorView (View) .layout (int, int, int, int) line: 6886 ViewRoot.performTraversals() line: 996 ViewRoot.handleMessage (Message) line: 1633 ViewRoot (Handler) .dispatchMessage (Message) line: 99 Looper.loop() line: 123 ActivityThread.main (String []) строка: 4363 Method.invokeNative (Object, Object [], Class, Class [], Class, int, boolean) строка: недоступна [native метод] Строка Method.invoke (Object, Object ...): 521 ZygoteInit $ MethodAndArgsCaller.run(): 862 ZygoteInit.main (String []) строка: 620 NativeStart.main (String []) строка : не доступен [нативный метод]
Я проверил. Обычно в массиве 5 элементов, и «позиция» никогда не превышает 4, как ожидалось. Обычно авария произойдет на итерации «Position = 4», но не всегда. – Frac