2017-09-13 102 views
1

我正在使用MVP。我的活动包含一个片段。我正在初始化,然后设置演示者在Main-Activity的Create方法内部进行分段,如下所示。MVP中的演示者(Android)被删除/在片段内部为空

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类中我settinf Pretinter在setPresenterFunction中,如下所示。

public class MainFragment extends Fragment implements 
StashContract.PublishToView { 

public StashContract.ToPresenter forwardInteraction; 

public void setPresenter(StashContract.ToPresenter forwardInteraction) 
{ 
    this.forwardInteraction = forwardInteraction; 
} 

有时同时在内部mainFragment的OnCreateView我下面的代码所示执行搜索操作,我得到一个错误,说我前进的 “尝试调用接口方法的空对象引用”

有时我得到这个错误,有时候我没有。我不明白为什么会这样

​​

回答

0

解决方案

在片段的“onCreateView”的方法,只初始化意见。

移动“onResume”方法中的其余代码。

错误原因

检查这一形象

enter image description here

正如你所看到的,你的片段“onCreateView”是当你在“的onCreate”方法在你的活动被称为。

在您的代码的当前状态中,您可能会尝试在演示程序初始化之前使用演示程序。

因此,请将您的活动设置为“onCreate”方法,并将其用于片段的“onStart”或“onResume”。

您可以查看此project了解MVP架构更多。

+0

即使在mainActivity的onCreate方法中设置了演示者并在onStart()内使用Presenter之后,它仍然无法正常工作。 还有一件事我注意到,mainFrgament的onResume()方法被调用两次。 –