Android 当片段返回的数据为空时,如何在视图寻呼机中动态操作片段
在我的活动中,我正在设置Android 当片段返回的数据为空时,如何在视图寻呼机中动态操作片段,android,android-fragments,android-viewpager,mvp,Android,Android Fragments,Android Viewpager,Mvp,在我的活动中,我正在设置ViewPager,TabLayout,并在列表中添加两个片段实例。然后我将该列表传递给ViewPagerAdapter 我使用两个片段实例,因为api返回两个需要以选项卡方式显示的数据列表(一个列表在一个选项卡中,另一个列表在另一个选项卡中)。但当viewpager适配器返回片段时,若一个数据列表为空,那个么我在Tab-0中得到的是空屏幕 如何动态检测数据大小(这里比较混乱,因为需要调用片段)并基于此填充选项卡 ActivityOne.kt class Activity
ViewPager
,TabLayout
,并在列表中添加两个片段实例。然后我将该列表传递给ViewPagerAdapter
我使用两个片段实例,因为api返回两个需要以选项卡方式显示的数据列表(一个列表在一个选项卡中,另一个列表在另一个选项卡中)。但当viewpager适配器返回片段时,若一个数据列表为空,那个么我在Tab-0中得到的是空屏幕
如何动态检测数据大小(这里比较混乱,因为需要调用片段)并基于此填充选项卡
ActivityOne.kt
class ActivityOne : BaseActivity() {
lateinit var item: ArrayList<HistoryTabItem>
lateinit var tabLayout: Tabs
val InfoViewpagerAdapter:InfoVIewPagerAdapter by lazy { InfoVIewPagerAdapter(supportFragmentManager, ArrayList()) }
fun newInstance(context: Context): Intent {
return Intent(context, InfoFragment::class.java)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.info_tabview)
getFragments()
InfoViewpagerAdapter.arrayList = item
tabLayout = findViewById(R.id.tabsnfo_type)
val viewPager = findViewById<ViewPager>(R.id.view_pager_info_type)
viewPager.adapter = InfoViewpagerAdapter
tabLayout.setupWithViewPager(viewPager)
}
fun getFragments() {
item = ArrayList()
val HistoryTabItemSeller = HistoryTabItem()
HistoryTabItemSeller.fragment = InfoFragment.createInstance()
item.add(HistoryTabItemSeller)
val HistoryTabItemBuyer = HistoryTabItem()
HistoryTabItemBuyer.fragment = InfoFragment.createInstance()
item.add(HistoryTabItemBuyer)
}
}
class ActivityOne:BaseActivity(){
lateinit变量项:ArrayList
lateinit var tabLayout:选项卡
val InfoViewpagerAdapter:InfoViewpagerAdapter by lazy{InfoViewpagerAdapter(supportFragmentManager,ArrayList())}
有趣的新实例(上下文:上下文):意图{
返回意图(上下文,InfoFragment::class.java)
}
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.info\u选项卡视图)
getFragments()
InfoViewpagerAdapter.arrayList=项目
tabLayout=findviewbyd(R.id.tabsnfo_类型)
val viewPager=findViewById(R.id.view\U pager\U info\U类型)
viewPager.adapter=InfoViewpagerAdapter
tabLayout.setupWithViewPager(viewPager)
}
有趣的片段(){
item=ArrayList()
val HistoryTabItemSeller=HistoryTabItem()
HistoryTabItemSeller.fragment=InfoFragment.createInstance()
item.add(历史选项卡ItemSeller)
val HistoryTabItemBuyer=HistoryTabItem()
HistoryTabItemBuyer.fragment=InfoFragment.createInstance()
item.add(历史选项卡ItemBuyer)
}
}
信息视图页面雷达
class InfoVIewPagerAdapter(fm: FragmentManager, var arrayList: ArrayList<HistoryTabItem>) : FragmentPagerAdapter(fm) {
override fun getItem(position: Int): Fragment {
return arrayList[position].fragment
}
override fun getCount(): Int {
return arrayList.size
}
}
class-InfoVIewPagerAdapter(fm:FragmentManager,var-arrayList:arrayList):FragmentPagerAdapter(fm){
覆盖趣味getItem(位置:Int):片段{
返回arrayList[position].fragment
}
重写fun getCount():Int{
返回arrayList.size
}
}
碎片
class InfoFragment : BaseDaggerFragment(), InfoContract.View {
var isTickerShow: Boolean? = false
var tickerMessage: String? = null
lateinit var allTransactionList: ArrayList<Any>
@Inject
lateinit var infoPresenter: HoldInfoPresenter
val infoAdapter: InfoAdapter by lazy {
InfoAdapter(ArrayList()) }
lateinit var fakelist: ArrayList<Any>
companion object {
fun createInstance(): Fragment {
return InfoFragment()
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_container_info, container, false)
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initView()
infoPresenter.attachView(this)
infoPresenter.getInfo()
}
fun initView() {
rv_container.layoutManager = LinearLayoutManager(context)
rv_container.adapter = infoAdapter
}
override fun renderInfo(depositHistory: DepositHistory?) {
var resultList = ArrayList<Any>()
depositHistory?.let {
resultList = combinedTransactionList(it.sellerData as ArrayList<SellerDataItem>, it.buyerData as ArrayList<BuyerDataItem>)
isTickerShow = it.tickerMessageIsshow
tickerMessage = it.tickerMessageId
}
infoAdapter.list.clear()
infoAdapter.list.addAll(resultList)
infoAdapter.notifyDataSetChanged()
}
fun combinedTransactionList(arrayList: ArrayList<SellerDataItem>, arrayList1: ArrayList<BuyerDataItem>): ArrayList<Any> {
allTransactionList = ArrayList()
allTransactionList.clear()
allTransactionList.addAll(arrayList)
allTransactionList.addAll(arrayList1)
return allTransactionList
}
}
class-InfoFragment:BaseDaggerFragment(),InfoContract.View{
变量显示:布尔?=假
var tickerMessage:字符串?=null
lateinit var allTransactionList:ArrayList
@注入
lateinit var infoPresenter:HoldInfoPresenter
val infoAdapter:惰性{
InfoAdapter(ArrayList())}
lateinit var fakelist:ArrayList
伴星{
fun createInstance():片段{
返回InfoFragment()
}
}
覆盖创建视图(充气机:布局充气机,容器:ViewGroup?,savedInstanceState:Bundle?):视图{
val视图=充气机。充气(R.layout.fragment\u container\u info,container,false)
返回视图
}
覆盖已创建的视图(视图:视图,保存状态:捆绑?){
super.onViewCreated(视图,savedInstanceState)
initView()
infoPresenter.attachView(此)
infoPresenter.getInfo()
}
趣味initView(){
rv_container.layoutManager=LinearLayoutManager(上下文)
rv_container.adapter=信息适配器
}
覆盖fun renderInfo(存款历史记录:存款历史记录?){
var resultList=ArrayList()
历史?让我来{
resultList=combinedTransactionList(it.sellerData作为ArrayList,it.buyerData作为ArrayList)
isTickerShow=it.tickermessageshow
tickerMessage=it.tickerMessageId
}
infoAdapter.list.clear()
infoAdapter.list.addAll(结果列表)
infoAdapter.notifyDataSetChanged()
}
趣味组合交易列表(arrayList:arrayList,arrayList 1:arrayList):arrayList{
allTransactionList=ArrayList()
allTransactionList.clear()
allTransactionList.addAll(arrayList)
allTransactionList.addAll(arrayList1)
返回所有事务列表
}
}
最好的选择是获取活动中的数据,然后用两个选项卡或一个选项卡显示选项卡布局。您可以将其与共享视图模型一起使用,但我发现您在这里不使用视图模型。
当列表不为空时,也可以在片段中的createInstance()
方法中设置列表。
第三个选项是获取片段中的数据,然后向活动发送列表为空的信息,并隐藏特定选项卡。请添加您的code@mac229在“如何使用创建实例方法检查活动中的列表大小”中添加了代码“检查2”和“检查3”?代码“如何连接”您应该在活动中获取数据,然后检查列表是否为空,然后创建视图寻呼机适配器。