Expandable ListView的行为不一致

时间:2018-10-24 11:26:35

标签: android expandablelistview

我正在构建具有可扩展ListView的应用程序。我可以添加组标题(锻炼)和子项(锻炼)。

我决定使用自定义布局(仅包含一个按钮)向每个锻炼添加一个假孩子。这些按钮的想法是显示一个从用户那里获取信息的对话框。

只有一次锻炼时效果很好。

enter image description here

当我添加更多时,出现了问题。

首次锻炼没有按钮。

enter image description here

第一项锻炼的第一项锻炼已成为第二项锻炼的第一项锻炼。

enter image description here

我从调试器收到的错误:

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;
    }

谢谢

0 个答案:

没有答案