Ich benutze MVP. Meine Aktivität enthält ein Fragment. Ich initialisiere und setze den Moderator so, dass er wie folgt innerhalb der Main-Activity-Methode "Create" fragmentiert wird.Presenter in MVP (Android) wird gelöscht/bekommt null in Fragment
public class MainActivity extends AppCompatActivity {
private StashPresenter stashPresenter;
private MainFragment mainFragment;
FragmentManager fm;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
App.getInstance().getAppComponent().inject(this);
setContentView(R.layout.activity_main);
fm = getSupportFragmentManager();
fm.beginTransaction()
.add(R.id.fragment_container, MainFragment.newInstance(),"mainFragment")
.commitNow();
mainFragment = (MainFragment) fm.findFragmentById(R.id.fragment_container);
stashPresenter = new StashPresenter(mainFragment);
mainFragment.setPresenter(stashPresenter);
}
Inside my mainFrgament Klasse Ich bin settinf Presenter in setPresenterFunction wie folgt.
public class MainFragment extends Fragment implements
StashContract.PublishToView {
public StashContract.ToPresenter forwardInteraction;
public void setPresenter(StashContract.ToPresenter forwardInteraction)
{
this.forwardInteraction = forwardInteraction;
}
Manchmal während der Durchführung Suchoperation wie in meinem folgenden Code innerhalb OnCreateView von mainFragment gezeigt, ich einen Fehler bekommt meine vorwärts sagen „Versuch, Interface-Methode auf ein Null-Objekt Verweis aufrufen“
Irgendwann bekomme ich diesen Fehler, manchmal nicht. Ich verstehe nicht, warum dies geschieht
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
unbinder = ButterKnife.bind(this, view);
searchView.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
progressBar.setVisibility(View.VISIBLE);
forwardInteraction.searchButtonClick(actionId, searchView.getText().toString());
return true;
}
return false;
});
String[] artistNames = getResources().getStringArray(R.array.artistNamesSuggestion);
ArrayAdapter<String> adapterArtist = new ArrayAdapter<>(getActivity().getApplicationContext(), R.layout.fragment_main, R.id.search_phrase, artistNames);
searchView.setAdapter(adapterArtist);
searchView.setThreshold(1);
recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 3));
recyclerView.setAdapter(adapter);
recyclerView.addItemDecoration(new SpaceItemDecoration(space, space, space, space));
return view;
}
Es funktioniert nicht, auch nachdem Sie einen Presenter in der onCreate-Methode von mainActivity gesetzt haben und Presenter in onStart() verwendet haben. Noch eine Sache, die ich bemerkt habe, meine onResume() -Methode von MainFrgament zweimal aufgerufen werden. –