Android 在自定义视图中调用片段方法

Android 在自定义视图中调用片段方法,android,android-fragments,interface,android-custom-view,Android,Android Fragments,Interface,Android Custom View,因此,在某些背景下,我尝试调用自定义视图中片段(托管自定义视图)中的方法 我尝试过使用接口并在片段中实现它。我还尝试在customview中获取片段的实例,并以这种方式调用该方法。不管什么原因,我都会得到空指针 路#1 我实施的方法是: @Override public void update() { Toast.makeText(getActivity(), "Success", Toast.LENGTH_SHORT).show(); } 您可以使用侦听器(片段)并将其添加到视图(s

因此,在某些背景下,我尝试调用自定义视图中片段(托管自定义视图)中的方法

我尝试过使用接口并在片段中实现它。我还尝试在customview中获取片段的实例,并以这种方式调用该方法。不管什么原因,我都会得到空指针

路#1

我实施的方法是:

@Override
public void update() {
    Toast.makeText(getActivity(), "Success", Toast.LENGTH_SHORT).show();
}

您可以使用侦听器(片段)并将其添加到视图(setListener)。或者您可以使用事件总线(,等等)。目标是提交一个事件,并让某人通过订阅/取消订阅来收听它。

在构建自定义视图时,不要试图获取它,而是等到
onCreateView()
并通过公共方法自己注册片段

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle saved) {
    View view = inflater.inflate(...);
    SurveyView surveyView = (SurveyView) view.findViewById(...);
    surveyView.setUpdatePolls(this);
    ...
    return view;
}
然后,您的SurveyView只需要在尝试调用该方法之前执行一些空检查(以确保已注册某些内容)


这会起作用,但您需要使用
getSupportFragmentManager()

当用户单击自定义视图中的某个内容,并且我想触发片段中的某个内容时,相同的概念在这里也会起作用吗?这就是我正在尝试解决的当前情况。您建议的方式是从片段到自定义视图。我需要从一个自定义视图转到另一个片段……您的自定义视图调用片段上的方法,但您首先必须给它一个片段。我建议您通过
onCreateView()
中的公共修饰符方法(“setter”)来实现这一点。
public SurveyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setOrientation(VERTICAL);
        options = new ArrayList<>();
    myActivity = (AppCompatActivity)context;
                myActivity.getFragmentManager().findFragmentByTag("MULTIPLE_CHOICE_POLL_FRAGMENT");
            myActivity.update();
}
public class MultipleChoicePollFragment extends Fragment implements SurveyView.UpdatePolls
@Override
public void update() {
    Toast.makeText(getActivity(), "Success", Toast.LENGTH_SHORT).show();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle saved) {
    View view = inflater.inflate(...);
    SurveyView surveyView = (SurveyView) view.findViewById(...);
    surveyView.setUpdatePolls(this);
    ...
    return view;
}
if (updatePolls != null) {
    updatePolls.update();
}
myActivity = (AppCompatActivity)context;
                myActivity.getFragmentManager().findFragmentByTag("MULTIPLE_CHOICE_POLL_FRAGMENT");