为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Kotlin 中使用片段内的按钮进行 Android 开发?

如何在 Kotlin 中使用片段内的按钮进行 Android 开发?

HUWWW 2023-08-23 15:06:46
我是 Android 开发新手,并从 Android Studio 创建了一个新项目,其中包含 Kotlin 中的底部导航活动。此外MainActivity.kt,还生成了仪表板、主页和通知片段及其 ViewModel。当我处理 MainActivity 类中的按钮单击时,一切正常。class MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        val navView: BottomNavigationView = findViewById(R.id.nav_view)        val navController = findNavController(R.id.nav_host_fragment)        // Passing each menu ID as a set of Ids because each        // menu should be considered as top level destinations.        val appBarConfiguration = AppBarConfiguration(setOf(                R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications))        setupActionBarWithNavController(navController, appBarConfiguration)        navView.setupWithNavController(navController)        //handle button click        val temporary_button = findViewById<Button>(R.id.temporary_button)        temporary_button.setOnClickListener{            makeText(this, "You clicked the button", LENGTH_LONG).show()        }    }}这是工作按钮的屏幕截图 按钮工作正常但是我不明白如何使用不同片段内的按钮。我尝试为仪表板片段第二个按钮的屏幕截图中的第二个按钮创建功能,但我还没有找到解决方案。我努力了
查看完整描述

3 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

这就是我最终的结果:


class DashboardFragment : Fragment() {


private lateinit var dashboardViewModel: DashboardViewModel


override fun onCreateView(

    inflater: LayoutInflater,

    container: ViewGroup?,

    savedInstanceState: Bundle?

): View? {

    dashboardViewModel =

        ViewModelProviders.of(this).get(DashboardViewModel::class.java)

    val root = inflater.inflate(R.layout.fragment_dashboard, container, false)

    val textView: TextView = root.findViewById(R.id.text_dashboard)

    dashboardViewModel.text.observe(this, Observer {

        textView.text = it

    })

    val button2 : Button = root.findViewById<Button>(R.id.temporary_button2)

    button2.setOnClickListener{

        println("clicked button 2")

        Toast.makeText(view?.context, "Button Clicked", Toast.LENGTH_LONG).show()

    }

    return root

}

}


查看完整回答
反对 回复 2023-08-23
?
月关宝盒

TA贡献1772条经验 获得超5个赞

片段中没有findViewById,通常在片段内您应该重写该onCreateView方法,膨胀您自己的布局并尝试从您膨胀的视图中获取视图。例如 :


    @Nullable

    @Override

    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        if (mContentView == null){

            mContentView = inflater.inflate(R.layout.family_fragment_scene_list, container, false);

        }


        type = getArguments().getInt(ARGS_KEY_TYPE);


        adapter = new SceneAdapter(getContext());

        // get views from mContentView

        mSceneList = (RecyclerView) mContentView.findViewById(R.id.swipe_target);

        mSceneList.setLayoutManager(new LinearLayoutManager(getContext()));

        mSceneList.setAdapter(adapter);


        return mContentView;

    }


查看完整回答
反对 回复 2023-08-23
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

使用 getView()/view 尝试内部 onViewCreated 而不是 onCreateView。


例如。:


override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {

   val temporary_button = getView().findViewById<Button>(R.id.temporary_button2)

   temporary_button2.setOnClickListener{

   makeText(this, "You clicked the button", LENGTH_LONG).show()

   }

 }



查看完整回答
反对 回复 2023-08-23
  • 3 回答
  • 0 关注
  • 132 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信