簡體   English   中英

如何在 Fragment 內實現自動圖像滑塊

[英]How to Implement Auto Image Slider inside Fragment

我在我的項目中使用以下庫來自動滑動圖像。 它在活動中運行良好,但是當涉及到 Fragment 時,它會在傳遞上下文時拋出空指針異常作為getContext(); getActivity(); 而不是this; . 我現在堅持這一點。 請幫忙。

圖書館名稱:圖書館鏈接

我的片段內代碼:

SliderView sliderView = view.findViewById(R.id.ImageSlider);

SliderImageAdapter adapter = new SliderImageAdapter(getContext());
adapter.setCount(5);

sliderView.setSliderAdapter(adapter);

sliderView.setIndicatorAnimation(IndicatorAnimations.SLIDE); //set indicator animation by using SliderLayout.IndicatorAnimations. :WORM or THIN_WORM or COLOR or DROP or FILL or NONE or SCALE or SCALE_DOWN or SLIDE and SWAP!!
sliderView.setSliderTransformAnimation(SliderAnimations.CUBEINROTATIONTRANSFORMATION);
sliderView.setAutoCycleDirection(SliderView.AUTO_CYCLE_DIRECTION_BACK_AND_FORTH);
sliderView.setIndicatorSelectedColor(Color.WHITE);
sliderView.setIndicatorUnselectedColor(Color.GRAY);
sliderView.startAutoCycle();

我的日志貓:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.coderedinnovations.allioservices, PID: 7955
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.smarteist.autoimageslider.SliderView.setSliderAdapter(com.smarteist.autoimageslider.SliderViewAdapter)' on a null object reference
    at com.coderedinnovations.allioservices.AllioMain.HomeFragment.onCreateView(HomeFragment.java:53)
    at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
    at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
    at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
    at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
    at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
    at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
    at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2629)
    at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
    at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
    at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
    at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
    at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
    at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
    at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
    at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
    at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:201)
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1433)
    at android.app.Activity.performStart(Activity.java:7987)
    at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3521)
    at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:226)
    at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:206)
    at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:178)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:102)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2222)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:228)
    at android.app.ActivityThread.main(ActivityThread.java:7772)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:981)

布局代碼:

<androidx.cardview.widget.CardView
    app:cardCornerRadius="10dp"
    android:layout_margin="14dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <com.smarteist.autoimageslider.SliderView
        android:id="@+id/imageSlider"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        app:sliderAnimationDuration="600"
        app:sliderAutoCycleDirection="back_and_forth"
        app:sliderAutoCycleEnabled="true"
        app:sliderIndicatorAnimationDuration="600"
        app:sliderIndicatorGravity="center_horizontal|bottom"
        app:sliderIndicatorMargin="15dp"
        app:sliderIndicatorOrientation="horizontal"
        app:sliderIndicatorPadding="3dp"
        app:sliderIndicatorRadius="0.5dp"
        app:sliderIndicatorSelectedColor="#5A5A5A"
        app:sliderIndicatorUnselectedColor="#FFF"
        app:sliderScrollTimeInSec="1"
        app:sliderStartAutoCycle="true" />

</androidx.cardview.widget.CardView>

我的適配器沒有問題,它適用於我的其他活動。

沒有看到logcat錯誤日志,很難理解這里是什么問題。 但是,我認為我應該提出一些建議,以便您可以自己調查問題。

您可以考慮按如下方式從Fragment初始化您的適配器。

SliderImageAdapter adapter = new SliderImageAdapter(getActivity());

另外,請檢查您使用的布局是否具有ImageSlider屬性。 如果您嘗試膨脹的片段布局中沒有該布局 ID,則它也應該有一個空指針異常。

恕我直言,適配器看起來不錯。

更新

從 logcat 看來,您用於Fragment的布局沒有ImageSlider ,因此無法初始化sliderView

從您發布的布局imageSlider ,布局 ID 似乎是imageSlider ,而不是ImageSlider 布局 ID 區分大小寫。

因此,您應該對以下行進行如下修改。

view.findViewById(R.id.imageSlider);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM