在 PagerAdapter 中调用 API 后如何更新布局包含

How to update layout contain after API is been called in PagerAdapter

我创建了 viewpager 布局,其中我传递了三个不同的布局,无论是否选择该页面,只要任何 API 被调用所有三个,都需要更新。

MainActivity.java

int[] layouts = new int[]{R.layout.one, R.layout.two, R.layout.three};
MyAdapter adapter = new MyAdapter(this, layouts);

MyAdapter.java 它已扩展到 PagerAdapter

View view = layoutInflator.inflate(mLayouts[position], container, false);
container.addView(view);

如何初始化不同布局的所有 id,以及如何在调用 API 时更新文本或布局。

请根据您的要求尝试这种方式您也可以创建 3 个不同布局的 childFragment 并将它们添加到列表中

class MyFragment : Fragment{

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return super.onCreateView(inflater, container, savedInstanceState)
        initPager()
    }
    
    var fragmentAdapter: PagerAdapter? = null
    fun initPager() {
        fragmentAdapter = PagerAdapter(
            childFragmentManager)

        val fragment1 = ChildFragment("1")       
        fragmentAdapter!!.addFragment(fragment1,"title")

        val fragment2 = ChildFragment("2")
        fragmentAdapter!!.addFragment(fragment2,"title")

        val fragment3 = ChildFragment("3")
        fragmentAdapter!!.addFragment(fragment3,"title")

        viewPager.adapter = fragmentAdapter        
        viewPager.offscreenPageLimit = 3

        viewPager.addOnPageChangeListener(object :
            ViewPager.OnPageChangeListener {
            override fun onPageScrolled(
                position: Int,
                positionOffset: Float,
                positionOffsetPixels: Int
            ) {
            }

            override fun onPageSelected(position: Int) {
                // do this instead, assuming your adapter reference
                // is named mAdapter:
                for (page in childFragmentManager.fragments) {
                    val frag: Fragment = fragmentAdapter!!.getItem(position)
                    if (frag != null && frag is ChildFragment && page is ChildFragment) {
                        page.refresh()
                    }
                }
            }

            override fun onPageScrollStateChanged(state: Int) {}
        })
    }
}



class PagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager) {

    private val mFragmentList = ArrayList<Fragment>()
    private val mFragmentTitleList = ArrayList<String>()

    val activeFragment: List<Fragment>
        get() = mFragmentList

    override fun getItem(position: Int): Fragment {
        return mFragmentList[position]
    }

    override fun getCount(): Int {
        return mFragmentList.size
    }


    fun addFragment(fragment: Fragment, title: String) {
        mFragmentList.add(fragment)
        mFragmentTitleList.add(title)
    }

    override fun getPageTitle(position: Int): CharSequence? {
        return mFragmentTitleList[position]
    }
}



class ChildFragment : Fragment{

    var type:String = ""
    constructor(type:String){
        this.type = type
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return super.onCreateView(inflater, container, savedInstanceState)
        if(type.equals("")){
            //TODO LAYOUT LOGIC here according to type validation
        }else{
            //TODO LAYOUT LOGIC here according to type validation
        }

        refresh()
    }
    fun refresh() {
       //TODO CALL API and update your layoyt here

    }
}