【问题标题】:Can't use androidx.fragment.app.FragmentManager in ViewPager2无法在 ViewPager2 中使用 androidx.fragment.app.FragmentManager
【发布时间】:2019-10-23 23:31:46
【问题描述】:

Android Studio 3.6

我想将 ViewPager2 与 Fragments(滑动元素)一起使用

app/build.gradle:

implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation('com.crashlytics.sdk.android:crashlytics:2.10.1@aar') { transitive = true; }
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.google.android.material:material:1.1.0-beta01'
    implementation 'org.altbeacon:android-beacon-library:2.16.3'
    implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
    implementation 'androidx.viewpager2:viewpager2:1.0.0-beta05'

在我的自定义适配器中,我尝试这样做:

import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.myproject.fragment.UserFragment

class UserAdapter(private val userList: ArrayList<String>, fragmentManger: FragmentManager) :
    FragmentStateAdapter(fragmentManger) {

    override fun getItem(position: Int): Fragment {
        return UserFragment.getInstance(userList[position])
    }

    override fun getItemCount(): Int {
        return userList.size
    }
}

但我得到两个错误:

Class 'UserAdapter' is not abstract and does not implement abstract base class member @NonNull public abstract fun createFragment(p0: Int): Fragment defined in androidx.viewpager2.adapter.FragmentStateAdapter

None of the following functions can be called with the arguments supplied:
public constructor FragmentStateAdapter(@NonNull p0: Fragment) defined in androidx.viewpager2.adapter.FragmentStateAdapter
public constructor FragmentStateAdapter(@NonNull p0: FragmentActivity) defined in androidx.viewpager2.adapter.FragmentStateAdapter

第二个错误:

'getItem' overrides nothing

我的代码有什么问题?

【问题讨论】:

  • Class 'UserAdapter' is not abstract and does not implement abstract base class member @NonNull public abstract fun createFragment(p0: Int): Fragment 有什么不清楚的地方?

标签: android android-viewpager2


【解决方案1】:

试试这个代码

<android.support.v4.view.ViewPager
        android:id="@+id/my_viewpager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />


    private void setupViewPager() {
        List<Fragment> fragmentList = new ArrayList<>();
        YourFragment m1 = new YourFragment ();
        YourFragment m2 = new YourFragment ();
        fragmentList.add(m2);
        fragmentList.add(m1);
        viewPager.setAdapter(new PagerAdapter(getChildFragmentManager(), fragmentList));//inside fragment
        viewPager.setCurrentItem(currentItem);
        viewPager.setOffscreenPageLimit(2);
    }


     public class PagerAdapter extends FragmentStatePagerAdapter {
        List<Fragment> fragmentList;

        public PagerAdapter(FragmentManager fm, List<Fragment> fragmentListt) {
            super(fm);
            this.fragmentList = fragmentListt;
        }

        @Override
        public Fragment getItem(int position) {
            return fragmentList.get(position);
        }

        @Override
        public int getCount() {
            return fragmentList.size();
        }

        @Override
        public Parcelable saveState() {
            return null;
        }

        @Override
        public void restoreState(Parcelable arg0, ClassLoader arg1) {
            //do nothing here! no call to super.restoreState(arg0, arg1);
        }
    }

希望对你有帮助

【讨论】:

  • 我的 Activity 我找不到 getChildFragmentManager()
  • 你可以在activity内部使用getSupportFragmentManager(),getChildFragmentManager()用于fragment内部的fragment
  • 那你能说我有什么可以帮助你的吗
  • 我自己找到了解决方案。不再需要帮助。谢谢
猜你喜欢
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多