Android 自定义视图在AlertDialog中显示为空
为什么每次我尝试将自定义视图用于我的Android 自定义视图在AlertDialog中显示为空,android,kotlin,android-adapter,android-dialogfragment,android-dialog,Android,Kotlin,Android Adapter,Android Dialogfragment,Android Dialog,为什么每次我尝试将自定义视图用于我的RecyclerView适配器时,它都不会出现在我的AlertDialog中?我创建了必要的适配器和类,但由于某些原因,我没有看到任何预期的自定义布局 预期结果 当前结果 适配器 class MyRVAdapter(private val myList: ArrayList<Facility>) : RecyclerView.Adapter<RVAdapterFacilities.ViewHolder>() { overri
RecyclerView
适配器时,它都不会出现在我的AlertDialog
中?我创建了必要的适配器和类,但由于某些原因,我没有看到任何预期的自定义布局
预期结果
当前结果
适配器
class MyRVAdapter(private val myList: ArrayList<Facility>) : RecyclerView.Adapter<RVAdapterFacilities.ViewHolder>() {
override fun getItemCount(): Int {
return facilitiesList.size
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
// Hide LinearLayout containing TextViews on fragment load
holder.mLLTextViews.visibility = View.GONE
val item = facilitiesList[position]
holder.myButton.setOnClickListener {
// Initialize a new instance of AlertDialog
val builder = android.app.AlertDialog.Builder(holder.itemView.context)
// Set the alert dialog title
builder.setTitle("Dialog title")
// Set the alert dialog icon
builder.setIcon(R.drawable.ic_info_black_24dp)
// Set the alert dialog view
builder.setView(R.layout.fragment_dialog)
// Find TabLayout and ViewPager views
val tabLayout: TabLayout = holder.itemView.findViewById(R.id.m_dialog_tabs) as TabLayout
val viewPager: ViewPager = holder.itemView.findViewById(R.id.m_dialog_viewPager) as ViewPager
// Set classes per tab, set tab names
val adapter = CustomAdapter(getChildFragmentManager())
adapter.addFragment("Boy",CustomFragment.createInstance("John"));
adapter.addFragment("Girl",CustomFragment.createInstance("Stacy"));
adapter.addFragment("Robot", CustomFragment.createInstance("Aeon"));
viewPager.adapter = adapter
tabLayout.setupWithViewPager(viewPager)
// Set TabLayout text colour
// Set TabLayout indicator colour
tabLayout.setTabTextColors(holder.itemView.resources.getColor(R.color.piccadilly, null), holder.itemView.resources.getColor(R.color.grey, null))
tabLayout.setSelectedTabIndicatorColor(holder.itemView.resources.getColor(R.color.grey, null))
// Display a positive button on alert dialog
builder.setPositiveButton(R.string.ok){ dialog, _ -> dialog.dismiss()}
// Finally, make the alert dialog using 'builder'
val dialog: android.app.AlertDialog = builder.create()
// Display the alert dialog on app interface
dialog.show()
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.my_cv, parent, false)
return ViewHolder(v)
}
// button view holder
class ViewHolder (itemView : View):RecyclerView.ViewHolder(itemView) {
val myBtn = itemView.findViewById<Button>(R.id.my_btn)!!
}
}
自定义适配器类
class CustomFragment : androidx.fragment.app.Fragment() {
private var mText = ""
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val v = inflater.inflate(R.layout.fragment_sample, container, false)
(v.findViewById(R.id.textView_sample) as TextView).text = mText
return v
}
companion object {
fun createInstance(txt: String): CustomFragment {
val fragment = CustomFragment()
fragment.mText = txt
return fragment
}
}
}
class CustomAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) {
private var mFragmentCollection: MutableList<Fragment> = ArrayList()
private var mTitleCollection: MutableList<String> = ArrayList()
fun addFragment(title: String, fragment: Fragment) {
mTitleCollection.add(title)
mFragmentCollection.add(fragment)
}
override fun getPageTitle(position: Int): CharSequence? {
return mTitleCollection[position]
}
override fun getItem(position: Int): Fragment {
return mFragmentCollection[position]
}
override fun getCount(): Int {
return mFragmentCollection.size
}
}
class CustomAdapter(fm:FragmentManager):FragmentPagerAdapter(fm){
私有变量MFFragmentCollection:MutableList=ArrayList()
私有变量mTitleCollection:MutableList=ArrayList()
乐趣添加片段(标题:字符串,片段:片段){
mTitleCollection.add(标题)
添加(片段)
}
覆盖有趣的getPageTitle(位置:Int):字符序列{
返回mTitleCollection[位置]
}
覆盖趣味getItem(位置:Int):片段{
返回MFFragmentCollection[位置]
}
重写fun getCount():Int{
返回MFFragmentCollection.size
}
}
我怀疑这是基于使视图膨胀的上下文。试着稍微修改一下。将您的活动传递到recyclerview,并在其中保存一个实例。这完全是为了测试目的 像这样:
class MyRVAdapter(private val myList: ArrayList<Facility>, val myActivity: Activity) : RecyclerView.Adapter<RVAdapterFacilities.ViewHolder>() {
试着这样做
val builder = android.app.AlertDialog.Builder(myActivity)
val view = myActivity.layoutInflater.inflate(R.layout.dialog_layout, null)
如果这对您有效,那么您的膨胀过程需要活动上下文而不是适配器上下文
然后由您决定是否要在适配器中保留活动上下文,或者是否可以在适配器外部处理对话框
我个人的偏好是回调以处理传递项目和/或索引的单击事件,并允许所属活动进行任何膨胀。这将是我的建议,但出于测试目的,您可以在上面做并自己打电话
愉快的编码。我怀疑这是基于上下文膨胀视图。试着稍微修改一下。将您的活动传递到recyclerview,并在其中保存一个实例。这完全是为了测试目的 像这样:
class MyRVAdapter(private val myList: ArrayList<Facility>, val myActivity: Activity) : RecyclerView.Adapter<RVAdapterFacilities.ViewHolder>() {
试着这样做
val builder = android.app.AlertDialog.Builder(myActivity)
val view = myActivity.layoutInflater.inflate(R.layout.dialog_layout, null)
如果这对您有效,那么您的膨胀过程需要活动上下文而不是适配器上下文
然后由您决定是否要在适配器中保留活动上下文,或者是否可以在适配器外部处理对话框
我个人的偏好是回调以处理传递项目和/或索引的单击事件,并允许所属活动进行任何膨胀。这将是我的建议,但出于测试目的,您可以在上面做并自己打电话
快乐的编码。你从哪里得到的
myActivity
?我的第一条评论:)。我说“稍微修改一下”将您的活动传递到“回收者”视图中。这里我将更新以帮助您,我假设您创建了recycler视图也请不要将其命名为myActivity lol,这是为了举例说明RecyclerView是由alerdy创建的+我使用的是片段(不是活动)要显示我的RecyclerView
。我应该用什么替换mySavedActivity
?您从哪里获得myActivity
?我的第一条评论:)。我说“稍微修改一下”将您的活动传递到“回收者”视图中。这里我将更新以帮助您,我假设您创建了recycler视图也请不要将其命名为myActivity lol,这是例如,RecyclerView是由alerdy创建的+我正在使用片段(不是活动)来显示我的RecyclerView
。我应该用什么来替换我的AvedActivity
?