我在片段RecyclerView
中使用ImagesliderFragment
,首先它期望“ recyclerview不能为空”,因此在stackover流中,我得到一个答案,您应该使用以下行来初始化您的recyclerview: / p>
frag_rv = view.findViewById(R.id.frag_rv) as RecyclerView
但是问题是它给了我错误。 only safe or non null asserted calls are allowed
也是我的RecyclerView无法解决的问题,谁能向我解释这是什么问题?
ImagesliderFragment
class ImagesliderFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
inflater.inflate(R.layout.fragment_imageslider, container, false)
frag_rv = view.findViewById(R.id.frag_rv) as RecyclerView
frag_rv.layoutManager = LinearLayoutManager(context, LinearLayout.HORIZONTAL, false)
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
}
答案 0 :(得分:2)
尝试一下
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
) =
inflater.inflate(R.layout.fragment_imageslider, container, false).apply {
frag_rv = findViewById(R.id.frag_rv) as RecyclerView //val frag_rv if it's not declared elsewhere
frag_rv.layoutManager = LinearLayoutManager(context, LinearLayout.HORIZONTAL, false)
}
findViewById()
示例代码
class ImagesliderFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val myView = inflater.inflate(R.layout.fragment_imageslider, container, false)
val frag_rv = myView.findViewById(R.id.frag_rv) as RecyclerView
frag_rv.layoutManager = LinearLayoutManager(context, LinearLayout.HORIZONTAL, false)
return myView
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
}
答案 1 :(得分:0)
您可以将onCreateView方法更改为:
5903
通过这种方式,视图会膨胀(通过inflater.inflate),您正在使用它来查找RecyclerView。
答案 2 :(得分:0)
在使用view.findViewById
之前,必须对其进行初始化,如下所示,还请在val
之前使用frag_rv
。
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// here you have to initialize your view
View view = inflater.inflate(R.layout.fragment_imageslider, container, false)
val frag_rv = view.findViewById(R.id.frag_rv) as RecyclerView
frag_rv.layoutManager = LinearLayoutManager(context, LinearLayout.HORIZONTAL, false)
return view
}
答案 3 :(得分:0)
您仅应使用onCreateView方法来扩大视图并在onViewCreated方法中绑定iew
class ImagesliderFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?) = inflater.inflate(R.layout.fragment_imageslider, container, false)!!
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val frag_rv = view.findViewById<RecyclerView>(R.id.frag_rv) frag_rv.layoutManager = LinearLayoutManager(context, LinearLayout.HORIZONTAL,
false)
}
}