我正在构建具有可扩展ListView的应用程序。我可以添加组标题(锻炼)和子项(锻炼)。
我决定使用自定义布局(仅包含一个按钮)向每个锻炼添加一个假孩子。这些按钮的想法是显示一个从用户那里获取信息的对话框。
只有一次锻炼时效果很好。
当我添加更多时,出现了问题。
首次锻炼没有按钮。
第一项锻炼的第一项锻炼已成为第二项锻炼的第一项锻炼。
我从调试器收到的错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ofek.prolog, PID: 11532
java.lang.NullPointerException
at com.example.ofek.prolog.MyListAdapter.getChildView(MyListAdapter.java:112)
第112行是我正在设置的TextView,但是它不起作用。孩子的顺序不正确,因此设置了其他布局。
这是我的列表适配器getChildView:
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View view, ViewGroup parent) {
ExerciseItem exerciseItem = (ExerciseItem) getChild(groupPosition, childPosition);
//Set Bundle and pass the group position
final Bundle bundle = new Bundle();
bundle.putInt("groupPosition", groupPosition);
if (view == null) {
LayoutInflater infalInflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (exerciseItem.isFirstChild()) {
view = infalInflater.inflate(R.layout.button_exercise_row, null);
Button newExercise = view.findViewById(R.id.add_exercise);
newExercise.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Set FragmentManager
FragmentManager fragmentManager = ((AppCompatActivity) context).getFragmentManager();
//create a dialog that ask the details of the exercise
NewExerciseChildFragment newExerciseDialog = new NewExerciseChildFragment();
newExerciseDialog.setStyle(DialogFragment.STYLE_NORMAL, R.style.CustomNewDialogFragment);
newExerciseDialog.setArguments(bundle);
newExerciseDialog.show(fragmentManager, "showExerciseDialog");
}
});
}else{
view = infalInflater.inflate(R.layout.exercise_row, null);
}
}
if (!exerciseItem.isFirstChild()){
//Some visual code
}
return view;
}
谢谢