TabAdapter 中的片段拒绝更新 TextView
Fragment inside TabAdapter Refuse to Update TextView
我有一个超级简单的 Fragment
存在于 TabAdapter
中。由于某种原因,我无法更新 textViews
之一。这是它的样子。我想更新 textView
"hello there home fragment"(较大的那个)。
这是我的主要 activity:
class MainActivity: AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
getSupportActionBar()?.hide();
view_pager.adapter = TabsAdapter(supportFragmentManager)
tab_layout.setupWithViewPager(view_pager)
}
}
这是我的 TabsAdapter:
class TabsAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager) {
private val fragmentTitles = arrayOf("Home", "Music", "Map")
override fun getItem(position: Int): Fragment {
when (position) {
0 ->
return HomeFragment()
1 ->
return MusicFragment()
2 ->
return MapFragment()
else ->
return HomeFragment()
}
}
// Return the number of views/fragments available.
override fun getCount(): Int = 3 // in our case 3 fragments
// Return title based on position
override fun getPageTitle(position: Int): CharSequence {
return fragmentTitles[position]
}
}
这是我的 HomeFragment():
class HomeFragment : Fragment() {
var weathermainView: TextView?=null
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view = inflater!!.inflate(R.layout.fragment_home, container, false)
val weathermainView = view.findViewById<TextView>(R.id.textweathermain)
println("***********************************************")
println("value of weathermainView in onCreateView BEFORE setting: " + weathermainView?.text)
println("***********************************************")
weathermainView.setText("YOLO DAWG")
println("***********************************************")
println("value of weathermainView in onCreateView AFTER setting: " + weathermainView?.text)
println("***********************************************")
return inflater!!.inflate(R.layout.fragment_home, container, false)
}
}
所以选项卡肯定会按它们应该的方式循环,但是当我启动模拟器时,这是输出:
I/System.out: ***********************************************
I/System.out: value of weathermainView in onCreateView BEFORE setting: hello there home fragment
I/System.out: ***********************************************
I/System.out: ***********************************************
I/System.out: value of weathermainView in onCreateView AFTER setting: YOLO DAWG
I/System.out: ***********************************************
然而
主屏幕没有改变,即使它说 textView.text 值应该不同。我仔细检查了 textView 项目是否是我的布局包中的正确项目。我也试过在 onViewCreated 生命周期挂钩中设置文本,但这似乎也不起作用。
这真的不应该这么难。我已经在 Whosebug 和文档中寻找了好几天,尽我所能告诉你这是你应该这样做的方式。任何帮助将不胜感激。
将您的方法更改为 return a view
而不是再次将其充气为
class HomeFragment : Fragment() {
var weathermainView: TextView?=null
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view = inflater!!.inflate(R.layout.fragment_home, container, false)
val weathermainView = view.findViewById<TextView>(R.id.textweathermain)
println("***********************************************")
println("value of weathermainView in onCreateView BEFORE setting: " + weathermainView?.text)
println("***********************************************")
weathermainView.setText("YOLO DAWG")
println("***********************************************")
println("value of weathermainView in onCreateView AFTER setting: " + weathermainView?.text)
println("***********************************************")
return view //< --- do this
}
}
我有一个超级简单的 Fragment
存在于 TabAdapter
中。由于某种原因,我无法更新 textViews
之一。这是它的样子。我想更新 textView
"hello there home fragment"(较大的那个)。
这是我的主要 activity:
class MainActivity: AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
getSupportActionBar()?.hide();
view_pager.adapter = TabsAdapter(supportFragmentManager)
tab_layout.setupWithViewPager(view_pager)
}
}
这是我的 TabsAdapter:
class TabsAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager) {
private val fragmentTitles = arrayOf("Home", "Music", "Map")
override fun getItem(position: Int): Fragment {
when (position) {
0 ->
return HomeFragment()
1 ->
return MusicFragment()
2 ->
return MapFragment()
else ->
return HomeFragment()
}
}
// Return the number of views/fragments available.
override fun getCount(): Int = 3 // in our case 3 fragments
// Return title based on position
override fun getPageTitle(position: Int): CharSequence {
return fragmentTitles[position]
}
}
这是我的 HomeFragment():
class HomeFragment : Fragment() {
var weathermainView: TextView?=null
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view = inflater!!.inflate(R.layout.fragment_home, container, false)
val weathermainView = view.findViewById<TextView>(R.id.textweathermain)
println("***********************************************")
println("value of weathermainView in onCreateView BEFORE setting: " + weathermainView?.text)
println("***********************************************")
weathermainView.setText("YOLO DAWG")
println("***********************************************")
println("value of weathermainView in onCreateView AFTER setting: " + weathermainView?.text)
println("***********************************************")
return inflater!!.inflate(R.layout.fragment_home, container, false)
}
}
所以选项卡肯定会按它们应该的方式循环,但是当我启动模拟器时,这是输出:
I/System.out: ***********************************************
I/System.out: value of weathermainView in onCreateView BEFORE setting: hello there home fragment
I/System.out: ***********************************************
I/System.out: ***********************************************
I/System.out: value of weathermainView in onCreateView AFTER setting: YOLO DAWG
I/System.out: ***********************************************
然而
主屏幕没有改变,即使它说 textView.text 值应该不同。我仔细检查了 textView 项目是否是我的布局包中的正确项目。我也试过在 onViewCreated 生命周期挂钩中设置文本,但这似乎也不起作用。
这真的不应该这么难。我已经在 Whosebug 和文档中寻找了好几天,尽我所能告诉你这是你应该这样做的方式。任何帮助将不胜感激。
将您的方法更改为 return a view
而不是再次将其充气为
class HomeFragment : Fragment() {
var weathermainView: TextView?=null
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view = inflater!!.inflate(R.layout.fragment_home, container, false)
val weathermainView = view.findViewById<TextView>(R.id.textweathermain)
println("***********************************************")
println("value of weathermainView in onCreateView BEFORE setting: " + weathermainView?.text)
println("***********************************************")
weathermainView.setText("YOLO DAWG")
println("***********************************************")
println("value of weathermainView in onCreateView AFTER setting: " + weathermainView?.text)
println("***********************************************")
return view //< --- do this
}
}