我有一個這樣的界面:
public interface IStartCamera {
void startScanning();
}
我有一個實作這個介面的片段,在這個片段中我有一個這樣的覆寫:
@Override
public void startScanning() {
Intent intent = new Intent(getActivity(), QrScanAcitivity.class);
startActivityForResult(intent, SQ_SCANNING_RESULT);
startActivity(new Intent(getActivity().getApplicationContext(), QrScanAcitivity.class));
}
在我的活動中,當單擊導航按鈕時,我創建了這個片段的一個實體,如下所示:
private IStartCamera iStartCameraInFragment;
public void setStartCameraInFragment(IStartCamera IStartCameraInFragment) {
this.iStartCameraInFragment = IStartCameraInFragment;
}
fragment = new ExitFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
fragment).commit();
navigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
fragment = null;
switch (item.getItemId()){
case R.id.item_manual_scanning:
fragment = new ExitFragment();
setStartCameraInFragment(fragment); // <=== I HAVE THE PROBLEM HERE
break;
case R.id.item_reload:
fragment = new ReloadFragment();
break;
case R.id.item_add_entry_info:
fragment = new AddEntryInfoFragment();
break;
}
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
fragment).commit();
return true;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.fabOpenCamera:
iStartCameraInFragment.startScanning();
break;
}
}
當我在實體化片段時使用 setStartCameraInFragment(fragment) 時,我得到了一個錯誤的要求,因為它需要一個 IStartCamera 而不是片段,即使該片段實作了 IStartCamera。
uj5u.com熱心網友回復:
首先,不要使用建構式來實體化 Fragment。使用靜態方法(通常命名為“newInstance”)來實體化 Fragments 是一種很好的做法,因為如果您以后想將任何引數傳遞給它,您將能夠輕松地做到這一點。
關于您的問題,您收到錯誤是因為您嘗試使用 Fragment 物件呼叫“setStartCameraInFragment”方法,而該方法需要 IStartCamera 的實體。你應該做的(如果你想堅持這個邏輯)是檢查 Fragment 是否是 IStartCamera 介面的實體,然后你就可以使用它了。這是一個例子:
if (fragment instanceof IStartCamera)
setStartCameraInFragment((IStartCamera)fragment); // --> Here the fragment can be considered as an instance of IStartCamera and this will work
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/411997.html
標籤:
