Я пытаюсь создать фрагмент Android в Nativescript с намерением вставить в него карту Mapbox, чтобы я мог получить доступ к обратным вызовам жизненного цикла фрагмента.
Однако я продолжаю сталкиваться с этим исключением, которое яне понимаю:
System.err: android.content.res.Resources$NotFoundException: Unable to find resource ID #0xfffffff6
System.err: at android.content.res.ResourcesImpl.getResourceTypeName(ResourcesImpl.java:269)
System.err: at android.content.res.Resources.getResourceTypeName(Resources.java:1965)
System.err: at android.support.v4.app.FragmentManagerImpl.loadAnimation(FragmentManager.java:1172)
System.err: at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1808)
System.err: at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
System.err: at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)
System.err: at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
System.err: at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
System.err: at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
System.err: at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
System.err: at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
System.err: at android.os.Handler.handleCallback(Handler.java:790)
System.err: at android.os.Handler.dispatchMessage(Handler.java:99)
System.err: at android.os.Looper.loop(Looper.java:164)
System.err: at android.app.ActivityThread.main(ActivityThread.java:6518)
System.err: at java.lang.reflect.Method.invoke(Native Method)
System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Поиск в течение нескольких часов дал мало результатов.
Документация неясна, но кажется, что тег Placeholder является правильным тегом для вставки нативных элементов управления, поэтому я предположил, что это то, что я использовал бы для вставки фрагмента Android.
Это правильно?
Итак, в моем компоненте есть тег Placeholder html:
<ActionBar title="Ng Mapbox Demo" class="action-bar">
</ActionBar>
<StackLayout class="page" id="page">
<Placeholder (creatingView)="creatingView($event)" id="mapContainer"></Placeholder>
</StackLayout>
В качестве простого доказательства реализации компонента концепции, основанного на числефрагментов, я придумала:
public static newInstance() : MapFragment {
return new MapFragment();
}
creatingView( args : CreateViewEventData ) {
let fragment = MapFragment.newInstance();
let fragmentManager = args.context.getSupportFragmentManager();
let fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace( fragment.getId(), fragment );
fragmentTransaction.commit();
args.view = fragment;
}
и в моем файле mapfragment.android.ts у меня есть:
public onCreateView( inflater: android.view.LayoutInflater, container: android.view.ViewGroup, savedInstanceState: android.os.Bundle ) {
let result = super.onCreateView( inflater, container, savedInstanceState );
// just doing this as an experiment to see if I can get it working.
let nativeView = new android.widget.TextView( this.getActivity() );
nativeView.setSingleLine(true);
nativeView.setEllipsize(android.text.TextUtils.TruncateAt.END);
nativeView.setText("Native");
// If I uncomment this line, the content appears but it takes over the
// entire screen clobbering the actionbar.
//
// container.addView( nativeView );
// if I return the nativeView like this I get the exception.
return nativeView;
}
Я полагаю, что упускаю что-то очевидное или, может бытьесть фундаментальное недопонимание фрагментов.Я не смог найти четких примеров того, как это сделать, в NativeScript.
Если я вызываю addView () для контейнера, содержимое появляется, но оно забивает панель действий и захватывает весь экран.
Если я возвращаю nativeView, я получаю исключение.
Я не уверен, что мне не хватает или это ошибка.
Есть ли пример, который демонстрирует, как это сделать где-нибудь в Nativescript?
Я выполняю:
✔ Getting NativeScript components versions information...
✔ Component nativescript has 5.3.1 version and is up to date.
✔ Component tns-core-modules has 5.3.1 version and is up to date.
✔ Component tns-android has 5.3.1 version and is up to date.