【问题标题】:unable to show snackbar in fragment无法在片段中显示小吃吧
【发布时间】:2021-11-04 04:40:05
【问题描述】:

我试图在片段中显示snackbar,但无法显示我添加了下面的代码。我尝试了很多方法来显示snackbar,但我不知道如何在选项卡布局片段中显示snackbar,我在fragment 中创建了tabLayout

class Books : Fragment(), bookadapter.OnBookItemClicklistner {

lateinit var addbooks: FloatingActionButton
lateinit var bookrecyclerView: RecyclerView
lateinit var bookadapter: bookadapter
lateinit var database: FirebaseDatabase
lateinit var databaseReference: DatabaseReference
lateinit var auth: FirebaseAuth
var booklist = arrayListOf<Booksmodel>()
lateinit var bookprogressbar: ProgressBar


override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // Inflate the layout for this fragment
    val view = inflater.inflate(R.layout.fragment_books, container, false)

    setHasOptionsMenu(true)

    addbooks = view.findViewById(R.id.booksFAB)
    bookrecyclerView = view.findViewById(R.id.bookrecyclerview)
    bookrecyclerView.setHasFixedSize(true)
    bookprogressbar = view.findViewById(R.id.bookprogressbar)
    bookprogressbar.visibility = View.VISIBLE
    auth = FirebaseAuth.getInstance()
    database = FirebaseDatabase.getInstance()
    databaseReference = database.getReference("Books")


    booklist.clear()

    bookrecyclerView.layoutManager = LinearLayoutManager(context)

    showbooks()

    addbooks.setOnClickListener {
        startActivity(Intent(context, Addbooks::class.java))

    }
    if (!isconnected(requireContext())) {
        val snackbar = Snackbar.make(view, "No Internet", Snackbar.LENGTH_INDEFINITE)
        snackbar.show()

    }
    return view
}
private fun isconnected(context: Context): Boolean {
    val connectionmanager: ConnectivityManager =
        context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val networkinfo = connectionmanager.activeNetworkInfo
    return networkinfo != null && networkinfo.isConnectedOrConnecting
}
}

【问题讨论】:

  • 将您的小吃店逻辑移动到 onViewCreated 方法中以使其工作

标签: android android-studio kotlin android-snackbar


【解决方案1】:

根据片段生命周期和onCreateView 文档

onCreateView:调用以使片段实例化其用户界面视图。这是可选的,非图形片段可以返回 null。

这就是为什么您不能修改或显示任何小部件 (Scoped to the current Fragment) 而屏幕处于 onCreateView 状态的 Fragment 仍将初始化视图。

一个简单的替代方法是使用onViewCreated 方法。在onCreateView 方法之后调用此方法。这确保了 view 已经被创建。

BooksFragment.kt

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        if (!isconnected(requireContext())) {
            val snackbar = Snackbar.make(view, "No Internet", Snackbar.LENGTH_INDEFINITE)
            snackbar.show()

        }
    }

【讨论】:

    猜你喜欢
    • 2020-10-18
    • 1970-01-01
    • 2019-07-25
    • 2020-03-05
    • 2021-10-24
    • 2018-05-04
    • 2020-09-07
    • 2018-07-03
    • 1970-01-01
    相关资源
    最近更新 更多