问题描述
项目 1 我创建了一个应用程序,它扫描附近支持 wifidirect 的设备,其 UI 很简单,只有一个布局(activitymain.xml),代码在 MainActivity.java 和 WifiDirectbroadcastReceiver 中。 (代码可以在这里找到:Can't find nearby WiFi- Direct devices showing "No Device Found!")
项目 2 现在,我想使用包含 2 个选项卡的 Tablayout(自定义不是默认的),所以我必须使用 2 个片段。 我应该将 MainActivity(project1) 中的代码放在哪里? 我应该复制到 fragment1 还是 MainActivity(Project2)
解决方法
您必须将 MainActivity (project1) 的代码复制到选项卡式布局的片段中。然后像下面这样配置 SectionPagerAdapter。
此外,您还必须更改 MainActivity 的一些代码,使其适合片段。
private val TAB_TITLES = arrayOf(
R.string.tab_text_1,R.string.tab_text_2
)
/**
* A [FragmentPagerAdapter] that returns a fragment corresponding to
* one of the sections/tabs/pages.
*/
class SectionsPagerAdapter(private val context: Context,fm: FragmentManager)
: FragmentPagerAdapter(fm) {
override fun getItem(position: Int): Fragment {
var fragment: Fragment? = null
when (position) {
0 -> fragment = Fragment1("f1","f1")
1 -> fragment = Fragment2("f2","f2")
}
return fragment!!
}
override fun getPageTitle(position: Int): CharSequence? {
return context.resources.getString(TAB_TITLES[position])
}
override fun getCount(): Int {
// Show 2 total pages.
return 2
}
}
您可以像这样创建片段:
private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"
class Fragment1 : Fragment() {
private var param1: String? = null
private var param2: String? = null
private var _binding: Fragment1Binding? = null
private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
param1 = it.getString(ARG_PARAM1)
param2 = it.getString(ARG_PARAM2)
}
}
override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View {
_binding = FragmentHomeBinding.inflate(inflater,container,false)
val view = binding.root
return view
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun onPause() {
super.onPause()
}
override fun onResume() {
super.onResume()
}
companion object {
@JvmStatic
fun newInstance(param1: String,param2: String) =
HomeFragment().apply {
arguments = Bundle().apply {
putString(ARG_PARAM1,param1)
putString(ARG_PARAM2,param2)
}
}
}
}
您可以像这样制作 Fragment2 并将其附加到您的选项卡式布局。