我希望我的按钮可以调用片段中的方法

时间:2015-06-15 08:14:16

标签: android button fragment

所以我有(WorkoutList活动) - > (WorkoutList Fragment) - > (ExerciseList Fragment) - > (addExercise Fragment)

在AddExercise中有一个按钮,我想让它调用ExerciseList中的方法

问题在于,通过当前的设置,我“尝试调用虚拟方法”

void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

AddExercise的XML按钮:

<Button
    android:id="@+id/add_exercise_button"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="@string/add_workout_message_done"
    android:layout_weight="0"
    android:onClick="addExerciseDone"
    />

OnCreateView方法中的ExerciseList的代码片段:

     View rootView = inflater.inflate(R.layout.fragment_exercise_list, container, false);
    Button AddExerciseDoneButton = (Button) getActivity().findViewById(R.id.add_exercise_button);
    AddExerciseDoneButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            addExerciseDone(v);
        }
    });

注意: 这是对chinmay的建议的回应** 我将viewroot设置为ExerciseList的XML文件,这样我就可以让我的适配器显示我的listview,所以我不确定如何返回我创建的视图,所以我可以引用按钮。例如,我做了

final View tmpView = inflater.inflate(R.layout.fragment_add_exercise, container, false);

    Button AddExerciseDoneButton = (Button) tmpView.findViewById(R.id.add_exercise_button);

1 个答案:

答案 0 :(得分:1)

您收到NullPointerException,因为您对AddExerciseDoneButton的引用不是有效的。 您还没有指定任何具有按钮ID的布局 - R.id.add_exercise_button,当您尝试使用该按钮时,它将提供NullPointer

而你的onCreateView应该看起来像

public static class ExampleFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.example_fragment, container, false);
    }
}

让你的视图引用onCreateView返回的视图,它将获得按钮ID

供参考:http://developer.android.com/guide/components/fragments.html

你这样做

View rootView = inflater.inflate(R.layout.fragment_exercise_list, container, false);
    Button AddExerciseDoneButton = (Button) getActivity().findViewById(R.id.add_exercise_button);

而不是这个

     View rootView = inflater.inflate(R.layout.fragment_exercise_list, container, false);
        Button AddExerciseDoneButton = (Button) 
rootView.findViewById(R.id.add_exercise_button);