So for some background I've tried to call a method I have in my fragment (that's hosting the custom view) within the custom view.
I've tried using an interface and implementing it in the fragment. I've also tried getting an instance of the fragment in the customview and calling the method that way. For whatever reason, I get null pointers both ways.
Way #1
public SurveyView(Context context, AttributeSet attrs) {
super(context, attrs);
setOrientation(VERTICAL);
options = new ArrayList<>();
//updatePolls is the interface.
updatePolls = new MultipleChoicePollFragment();
}
public interface UpdatePolls {
void update();
}
Then I call the method in an onClickListener:
v.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
for (int p = 0; p < options.size(); p++) {
if (options.get(p) == v) {
setAnswers(p);
updatePolls.update();
}
}
}
});
The method update() gets called in my fragment and I try to display a toast, but it returns with a null pointer.
Way #2
Get an instance of the fragment in the customview's constructor and call the method.
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();
}
This also returns a null pointer....
my fragment is:
public class MultipleChoicePollFragment extends Fragment implements SurveyView.UpdatePolls
And the method I implement is:
@Override
public void update() {
Toast.makeText(getActivity(), "Success", Toast.LENGTH_SHORT).show();
}