尝试构建一种结果跟踪器我遇到了这个问题;
我有一个自定义列表视图(带有标题),每个玩家都会获得一行。在这一行中有一个TextView for name和一个EditText用于抛出的数量(以及其他)。
在模拟器上运行时,一切运行正常。
在手机上运行而不更改任何值时,一切运行正常。
当在手机上运行并在ListView的最后一行中报告值时,代码会跳过第一项,从而在尝试查找最后一行时获得空指针异常。
通过此方法报告结果:
private void reportResults(ListView listViewPlayers, ArrayList<HoleResultInfo> holeResult_data, TextView tvPar, Integer hole){
//Skapar arrya ifrån antalet spelare i tabellen, justerar för header
System.out.println("gui hol Collecting hole results");
System.out.println("gui hol number of items in listview: " + listViewPlayers.getCount());
HoleResultInfo tempHoleResult;
for (int i = 0; i < listViewPlayers.getCount()-1; i++) {
tempHoleResult = holeResult_data.get(i);
//Starts at 1 to skip header
View rowView = listViewPlayers.getChildAt(i+1);
System.out.println("gui hol At i: " + i + " looking for child: " + (i + 1));
System.out.println("gui hol HoleResult name: " + holeResult_data.get(i).getName());
TextView tvName = (TextView)rowView.findViewById(R.id.tvPlayerName);
System.out.println("gui hol Textview name: " + tvName.getText().toString());
tempHoleResult.setName(tvName.getText().toString());
EditText etOb = (EditText)rowView.findViewById(R.id.etPlayerOb);
tempHoleResult.setOb(Integer.parseInt(etOb.getText().toString()));
EditText etTrows = (EditText)rowView.findViewById(R.id.etPlayerTrows);
tempHoleResult.setTrows(Integer.parseInt(etTrows.getText().toString()));
holeResult_data.set(i, tempHoleResult);
}
logcat的输出(有三个玩家:Otto,Teddy和Test)在模拟器中如下所示,而不是报告:
gui hol Collecting hole results
gui hol number of items in listview: 4
gui hol At i: 0 looking for child: 1
gui hol HoleResult name: Otto
gui hol Textview name: Otto
gui hol At i: 1 looking for child: 2
gui hol HoleResult name: Teddy
gui hol Textview name: Teddy
gui hol At i: 2 looking for child: 3
gui hol HoleResult name: Test
gui hol Textview name: Test
这是不工作时的输出:
gui hol Collecting hole results
gui hol number of items in listview: 4
gui hol At i: 0 looking for child: 1
gui hol HoleResult name: Otto
gui hol Textview name: Teddy
gui hol At i: 1 looking for child: 2
gui hol HoleResult name: Teddy
gui hol Textview name: Test
gui hol At i: 2 looking for child: 3
gui hol HoleResult name: Test
D/AndroidRuntime(15847): Shutting down VM
W/dalvikvm(15847): threadid=1: thread exiting with uncaught exception (group=0x41541318)
E/AndroidRuntime(15847): FATAL EXCEPTION: main
E/AndroidRuntime(15847): java.lang.NullPointerException
at frisbeegolf.gui.Hole.reportResults(Hole.java:141)
at frisbeegolf.gui.Hole.access$0(Hole.java:129)
at frisbeegolf.gui.Hole$1.onClick(Hole.java:69)
at android.view.View.performClick(View.java:4103)
at android.view.View$PerformClick.run(View.java:17117)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
第141行是:TextView tvName =(TextView)rowView.findViewById(R.id.tvPlayerName);
请帮助,我完全没有想法,为此疯狂!
/ O
答案 0 :(得分:0)
方法getChildAt()启用可见视图
View rowView = listViewPlayers.getChildAt(i+1);
您应该更改数据列表上的数据,例如ArrayList,然后通过从列表适配器调用notifydataSetChange方法来通知ListView
adapter.notifyDataSetChange();
您的适配器应该通过调用方法getView来更改可见单元格中的所有数据,但它没有附加在您的问题中