【问题标题】:How to update layout contain after API is been called in PagerAdapter在 PagerAdapter 中调用 API 后如何更新布局包含
【发布时间】:2021-07-15 10:29:03
【问题描述】:

我已经创建了 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时如何更新文本或布局。

【问题讨论】:

    标签: android layout android-viewpager


    【解决方案1】:

    请根据您的要求尝试这种方式您也可以创建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
    
        }
    }
    

    【讨论】:

    • :- 而不是 MyFragment 我必须在 Main Activity 中使用
    • 你也可以使用activity,我只是根据你的要求设计了方式来帮助你
    • 如果你在 JAVA 中而不是在 kotlin 中给出会很有帮助
    • 你可以在java中创建相同的,两者没有太大区别,如果你已经实现了那么你可以这样使用
    猜你喜欢
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多