MVP를 사용 중입니다. 내 활동에 단편이 하나 있습니다. 내가 초기화 오전 다음 Main-Activity 's Create 메서드 내에서 조각으로 프레 젠 테이션을 설정 다음과 같습니다.MVP (Android)의 프리젠터가 삭제되거나 내부에서 null이됩니다.
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);
}
내 mainFrgament 클래스 안에 setPresenterFunction의 Presenter를 다음과 같이 설정합니다.
public class MainFragment extends Fragment implements
StashContract.PublishToView {
public StashContract.ToPresenter forwardInteraction;
public void setPresenter(StashContract.ToPresenter forwardInteraction)
{
this.forwardInteraction = forwardInteraction;
}
mainFragment의 OnCreateView 안에 내 다음 코드와 같이 수행하는 검색 작업이, 내 앞으로에게 말하는 오류를 얻을 수 때로는 동안
"null 객체 참조에 인터페이스 메소드를 호출하는 시도" 언젠가 나는이 오류를 겪고 때로는 그렇지 않습니다. 이 조각의 "onCreateView"방법에서
@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;
}
mainActivity의 onCreate 메소드에서 발표자를 설정하고 onStart()에서 Presenter를 사용하여도 작동하지 않습니다. 한 가지 더 알아 두어야 할 점은 mainFrgament의 onResume() 메서드가 두 번 호출된다는 것입니다. –