Android 单击列表项时,如何从一个片段切换到另一个片段?
我在“所有用户”片段中有一个列表。单击列表中的名称时,它应该切换到“用户详细信息”片段。我似乎找不到一种方法来破坏这个片段,并提出新的一个,或只是显示在旧的上面的新的一个 使用的语言是科特林。我是新来的。我尝试了一些使用片段管理器的方法,但似乎无法找到正确的语法 主要活动1.ktAndroid 单击列表项时,如何从一个片段切换到另一个片段?,android,android-fragments,kotlin,Android,Android Fragments,Kotlin,我在“所有用户”片段中有一个列表。单击列表中的名称时,它应该切换到“用户详细信息”片段。我似乎找不到一种方法来破坏这个片段,并提出新的一个,或只是显示在旧的上面的新的一个 使用的语言是科特林。我是新来的。我尝试了一些使用片段管理器的方法,但似乎无法找到正确的语法 主要活动1.kt class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) {
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//Default view when app starts
title = resources.getString(R.string.allusers)
loadFragment(AllUsersFragment())
//Bottom Navigation Bar
navigationView.setOnNavigationItemSelectedListener {
when (it.itemId) {
R.id.navigation_allusers -> {
title = resources.getString(R.string.allusers)
loadFragment(AllUsersFragment())
return@setOnNavigationItemSelectedListener true
}
R.id.navigation_transfer -> {
title = resources.getString(R.string.transfer)
loadFragment(TransferFragment())
return@setOnNavigationItemSelectedListener true
}
R.id.navigation_logs -> {
title = resources.getString(R.string.logs)
loadFragment(LogsFragment())
return@setOnNavigationItemSelectedListener true
}
}
false
}
}
//function to load fragment when bottom navigation is clicked
fun loadFragment(fragment: Fragment) {
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.container, fragment)
transaction.addToBackStack(null)
transaction.commit()
}
}
AllUsersFragment.kt
class AllUsersFragment : Fragment(){
private lateinit var listView:ListView
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val rootView = inflater.inflate(R.layout.fragment_allusers, container, false)
val details = UserDetailsFragment()
val bundle = Bundle() //To transfer information
listView = rootView.findViewById(R.id.usersList)
val userNames = arrayOf(
"Andrew Jackson",
"Barry Alan",
"Caitlyn Snow",
"Drake Ramoray"
)
val adapter = ArrayAdapter(context, android.R.layout.simple_list_item_1, userNames)
listView.adapter = adapter
//List view item clicked listener
listView.onItemClickListener = AdapterView.OnItemClickListener { adapterView, view, i, l ->
val userName = userNames[i]
bundle.putString("str", userName)
bundle.putInt("int", i)
details.arguments = bundle
}
return rootView
}
}
UserDetails.kt
class UserDetailsFragment : Fragment(){
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val rootView = inflater.inflate(R.layout.fragment_user_details,container,false)
val nameField = rootView.findViewById<TextView>(R.id.nameField)
val imageField = rootView.findViewById<ImageView>(R.id.imageField)
//Importing images
val andrewjackson = BitmapFactory.decodeResource(context!!.resources,R.drawable.andrewjackson)
val barryalan = BitmapFactory.decodeResource(context!!.resources,R.drawable.barryalan)
val caitlynsnow = BitmapFactory.decodeResource(context!!.resources,R.drawable.caitlynsnow)
val drakeramoray = BitmapFactory.decodeResource(context!!.resources,R.drawable.drakeramoray)
val userImages = ArrayList<Bitmap>()
userImages.add(andrewjackson)
userImages.add(barryalan)
userImages.add(caitlynsnow)
userImages.add(drakeramoray)
val name = arguments!!.getString("str") //Displays name clicked on Details Page
nameField.setText(name)
val i =arguments!!.getInt("int") //Displays image of user from array
imageField.setImageBitmap(userImages[i])
return rootView
}
}
class UserDetailsFragment:Fragment(){
覆盖创建视图(充气机:布局充气机,容器:ViewGroup?,savedInstanceState:Bundle?):视图{
val rootView=充气机。充气(R.layout.fragment\u user\u详细信息,容器,false)
val nameField=rootView.findviewbyd(R.id.nameField)
val imageField=rootView.findviewbyd(R.id.imageField)
//导入图像
val andrewjackson=BitmapFactory.decodeResource(context!!.resources,R.drawable.andrewjackson)
val barryalan=BitmapFactory.decodeResource(context!!.resources,R.drawable.barryalan)
val caitlynsow=BitmapFactory.decodeResource(context!!.resources,R.drawable.caitlynsow)
val drakeramoray=BitmapFactory.decodeResource(context!!.resources,R.drawable.drakeramoray)
val userImages=ArrayList()
userImages.add(andrewjackson)
userImages.add(barryalan)
userImages.add(Caitlynsow)
userImages.add(drakeramoray)
val name=arguments!!.getString(“str”)//显示在详细信息页面上单击的名称
nameField.setText(名称)
val i=arguments!!.getInt(“int”)//显示数组中用户的图像
setImageBitmap(用户图像[i])
返回根视图
}
}
我认为在MainActivity.kt
中使用loadFragment
函数是可能的,但我想不出在片段中使用该函数的方法
预期产出:
单击列表中的某个名称时,该名称应更改为同一容器中的另一个片段,该片段显示用户详细信息。是的,有两种方法使用界面和公共方法。因为您的片段与活动绑定,这意味着它的父级是活动 因此,您可以访问该方法,只需使公共处于非活动状态,并使用
(activity as MainActivity).loadFragment(//Your fragment intance)
是活动和片段之间通信的示例。是的,有两种方法使用接口和使用公共方法。因为您的片段与活动绑定,这意味着它的父级是活动 因此,您可以访问该方法,只需使公共处于非活动状态,并使用
(activity as MainActivity).loadFragment(//Your fragment intance)
是活动和片段之间通信的示例。您已经设置好了所有内容,在单击的侦听器中,您应该只调用
activity?.loadFragment(UserDetailsFragment())
您已经设置好了所有内容,在单击的侦听器中,您只需调用
activity?.loadFragment(UserDetailsFragment())
您可以在片段中使用此代码替换容器中的片段
val someFragment = YourUserDetailsFragment()
val transaction = fragmentManager!!.beginTransaction()
transaction.replace(R.id.container, someFragment)
transaction.addToBackStack(null)
transaction.commit()
您可以在片段中使用此代码替换容器中的片段
val someFragment = YourUserDetailsFragment()
val transaction = fragmentManager!!.beginTransaction()
transaction.replace(R.id.container, someFragment)
transaction.addToBackStack(null)
transaction.commit()