Fragment 可以像 MainActivity 那样工作吗?

     2023-04-18     165

关键词:

【中文标题】Fragment 可以像 MainActivity 那样工作吗?【英文标题】:Can Fragment act like MainActivity? 【发布时间】:2021-09-09 21:36:25 【问题描述】:

项目1 我创建了一个应用程序,它扫描附近启用 wifidirect 的设备,其 UI 很简单,只有一个布局(activitymain.xml),代码在 MainActivity.java 和 WifiDirectBroadcastReceiver 中。 (代码可以在这里找到:Can't find nearby WiFi- Direct devices showing "No Device Found!")

项目2 现在,我想使用包含 2 个选项卡的 Tablayout(不是默认自定义),所以我必须使用 2 个片段。 我应该将 MainActivity(project1) 中的代码放在哪里? 我应该复制到 fragment1 还是 MainActivity(Project2)

【问题讨论】:

【参考方案1】:

您必须将 MainActivity (project1) 的代码复制到选项卡式布局的片段中。然后像下面这样配置 SectionPagerAdapter。

您还必须更改 MainActivity 的一些代码,以使其适合片段。

private val TAB_TITLES = arrayOf(
    R.string.tab_text_1,
    R.string.tab_text_2
)

/**
* A [FragmentPagerAdapter] that returns a fragment corresponding to
* one of the sections/tabs/pages.
*/
class SectionsPagerAdapter(private val context: Context, fm: FragmentManager)
: FragmentPagerAdapter(fm) 

override fun getItem(position: Int): Fragment 
    var fragment: Fragment? = null

    when (position) 
        0 -> fragment = Fragment1("f1","f1")
        1 -> fragment = Fragment2("f2","f2")
    

    return fragment!!


override fun getPageTitle(position: Int): CharSequence? 
    return context.resources.getString(TAB_TITLES[position])


override fun getCount(): Int 
    // Show 2 total pages.
    return 2


你可以像这样创建片段:

private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"

class Fragment1 : Fragment() 
   private var param1: String? = null
   private var param2: String? = null

   private var _binding: Fragment1Binding? = null
   private val binding get() = _binding!!


override fun onCreate(savedInstanceState: Bundle?) 
    super.onCreate(savedInstanceState)
    arguments?.let 
        param1 = it.getString(ARG_PARAM1)
        param2 = it.getString(ARG_PARAM2)
    


override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View 
    _binding = FragmentHomeBinding.inflate(inflater, container, false)
    val view = binding.root

    return view


override fun onDestroyView() 
    super.onDestroyView()
    _binding = null



override fun onPause() 
    super.onPause()



override fun onResume() 
    super.onResume()


companion object 
    @JvmStatic
    fun newInstance(param1: String, param2: String) =
            HomeFragment().apply 
                arguments = Bundle().apply 
                    putString(ARG_PARAM1, param1)
                    putString(ARG_PARAM2, param2)
                
            


您可以像这样制作 Fragment2 并将其附加到您的选项卡式布局中。

【讨论】:

这个答案对你有用吗?如果是,请接受。否则告诉我你的问题。 但是 MainActivity(Project1) 中的 onPause() 和 onResume() 方法中有一些代码,如何将它们复制到片段? (据我所知片段有不同的生命周期) fragments 里面也有 onPause 和 onResume 方法。这样您就可以将该代码复制给他们。 我已经更新了关于如何创建片段的答案。你可以把它作为你的参考。如果满意,请采纳答案。 :)

如何从 Mainactivity 编辑 Fragment 中的 TextView

】如何从Mainactivity编辑Fragment中的TextView【英文标题】:HowtoeditTextViewinFragmentfromMainactivity【发布时间】:2021-12-2414:13:35【问题描述】:我搜索了很多文档,并在下面编写了完整的代码,但是每次我运行它时,它都说viewisnull?请帮... 查看详情

如何在 MainActivity 和 Fragment 中正确获取 WifiManager 的实例

】如何在MainActivity和Fragment中正确获取WifiManager的实例【英文标题】:HowtoproperlygetaninstanceofWifiManagerinMainActivityandFragment【发布时间】:2016-03-3004:35:44【问题描述】:根据WifiManager你的Android文档:通过调用Context.getSystemService(Context.W... 查看详情

Android:MainActivity/Fragment 中的 ListView / GridView 重叠工具栏

】Android:MainActivity/Fragment中的ListView/GridView重叠工具栏【英文标题】:Android:ListView/GridViewOverlappingToolbarinMainActivity/Fragment【发布时间】:2017-12-1808:12:15【问题描述】:所以我最近一直在关注this教程,以便在我的主页中创建一个Li... 查看详情

android中activity和fragment生命周期的具体变化详解

前言:一个MainActivity中装载了两个Fragment,在MainActivity中的onCreate()方法中进行了Fragment的添加,显示与隐藏,默认显示的是FacilityFragment,点击导航可以切换到InformationFragment。下面我们来看看Fragment生命周期和MainActiv... 查看详情

如何从 Fragment 启动 Activity?

...的是空白布局,而不是与Activity关联的布局。我像这样从MainActivity.class调用Fragment:FragmentManagermFragmen 查看详情

Fragment 如何从使用 http 和异步任务获取数据的 MainActivity 类中获取数据?

】Fragment如何从使用http和异步任务获取数据的MainActivity类中获取数据?【英文标题】:HowFragmentcangetdatafromMainActivityclassthatgettingdatausinghttpandasycntask?【发布时间】:2020-02-0922:37:16【问题描述】:我正在使用AndroidStudio创建一个Android... 查看详情

如何从 MainActivity 中的 Fragment 访问适配器?我正在使用带有 viewpager 的标签,所以没有交易等方法

】如何从MainActivity中的Fragment访问适配器?我正在使用带有viewpager的标签,所以没有交易等方法【英文标题】:HowIcanaccessAdapterfromFragmentinMainActivity?Iamusingtabswithviewpagersonotransactionetcmethod【发布时间】:2019-10-2316:40:43【问题描述】... 查看详情

使用 Activity 的工具栏从 Fragment 向上导航

...布时间】:2018-03-2605:15:51【问题描述】:在我的应用中,MainActivity使用导航抽屉来托管多个片段。MainActivity提供了工具栏,fragment内容在FrameLayout的工具栏下方显示。在MainActivity中,我启动我的第一个片段 查看详情

Android Fragment 加载 API 数据

...我遇到的问题是我无法选择需要加载API数据的布局。我的MainActivity看起来像这样(我认为onCreate就足够了,但是复制了整个类):packagecom.exa 查看详情

Android Fragment,视图未删除

...述】:我开发了一个应用程序,其中我有一个片段交易,MainActivity包含FragmentView。MainActivity在屏幕顶部有三个Button,当我们将这个Activity转到另一个Fragment时,它们保持不变,只有MainActivityF 查看详情

如何在mainactivity中设置fragment的数据(代码片段)

...对象错误。我该如何修复代码?这是代码的一部分。这是MainActivityprivatevoidUIstart()Log.d(TAG,"UIstart:start");NavigatorUI=Navigator.HOME;ValDate=homeFrag.ValidDate();....这是HomeFragmentpublicclassHomeFragmentextendsFragmentpublicStringValid_Date_from;publicStringValid_Date... 查看详情

fragment

Fragment是轻量级的,比Activity快,适合同一个APP内页面的跳转。1:在MainActivity中启动一个fragment BlankFragment:publicclassMainActivityextendsAppCompatActivityimplementsBlankFragment.OnFragmentInteractionListener{@Overridepr 查看详情

使用fragment时如何获取控件id以及如何跳转

参考技术A一、使用Fragment获取控件Id我是在MainActivity中通过Fragment的事务管理把各个fragment添加到MainActivity中的,但是MainActivity中并没有很多控件,控件大都在各个fragment的布局里面,所以如何在fragmen中获取控件Id是一件非常重要... 查看详情

是否可以像 Vertex Shader 和 Fragment Shader 一样为 Android Camera Preview 提供效果,并使用 OpenGLES 保存捕获的图像?

】是否可以像VertexShader和FragmentShader一样为AndroidCameraPreview提供效果,并使用OpenGLES保存捕获的图像?【英文标题】:IsitPossibletogiveeffectlikeVertexShaderandFragmentShadertotheAndroidCameraPreview,andSavetheCapturedimagewithOpenGLES?【发布时间】:2011-12 查看详情

android:单activity多fragment,navigation实现fragment跳转,fragment之间通过viewmodel共享数据(代码片段)

单Activity多Fragment,Navigation实现Fragment跳转,Fragment之间通过ViewModel共享数据1、MainActivity2、HomeFragment,DetailFragment2.1、HomeFragment2.2、DetailFragment3、MyViewModel参考1、MainActivity1、activity_ma 查看详情

快速有效解决fragment中onactivityresult不回调的问题(代码片段)

应用场景:MainActivity嵌套了四个Fragment,信誓旦旦的在Fragment中打开一个功能页QrCodeActivity,在QrCodeActivity页面setResult(RESULT_OK,resultIntent);但是我的Fragment中的onActivityResult方法并没有执行到回调,网上有很多种方法... 查看详情

在 Fragment 内执行操作

...时间】:2015-04-0904:00:37【问题描述】:我有调用Fragment的MainActivity,片段调用类是:publicclassMainextendsFragment//publicMain()Buttonbtn;@OverridepublicViewonCreateView(LayoutInflater 查看详情

如何从 Main Activity 到 Fragment,并从同一个 Fragment 返回到 Main Activity?

】如何从MainActivity到Fragment,并从同一个Fragment返回到MainActivity?【英文标题】:HowtogofromMainActivitytofragment,andfromthesamefragmentbacktoMainActivity?【发布时间】:2021-03-2711:40:35【问题描述】:您好,我正在尝试制作一个应用程序,该应... 查看详情