以编程方式访问Android中片段XML中定义的视图

以编程方式访问Android中片段XML中定义的视图,第1张

概述我正在制作一个具有基于标签的导航的 Android 3应用.作为Android的新手,我搜索了标签教程并找到了一些不同的方法,其中基于Fragments ActionBar的实现似乎是最好的.我按照这些教程 http://www.abelski.com/courses/android3ui/actionbar.pdf(最后几张幻灯片)和 http://www.youtube.com/watch?v 我正在制作一个具有基于标签的导航的 Android 3应用.作为AndroID的新手,我搜索了标签教程并找到了一些不同的方法,其中基于Fragments Actionbar的实现似乎是最好的.我按照这些教程

http://www.abelski.com/courses/android3ui/actionbar.pdf(最后几张幻灯片)和
http://www.youtube.com/watch?v=gMu8XhxUBl8(视频格式相同课程)

…并且到达了标签显示的位置,我可以在它们之间切换,它们内部的简单TextVIEws显示正常.

现在,当我希望其中一个选项卡具有在片段的XML文件中定义的微调器窗口小部件并使用在strings.xml文件中定义的项目填充它时,会出现问题.当我尝试使用onCreate()方法中的getVIEwByID()访问微调器时,我总是得到一个空值.

据我了解,为了解决这个问题,我需要以某种方式声明片段的XML(类似于主布局已经使用setContentVIEw(R.layout.main)完成),以便getVIEwByID()知道在哪里寻找微调器(Eclipse的autocomplete虽然已找到它.但是,我完全不知道如何做到这一点,因为没有一个教程解决了你想在代码中修改基于XML的Fragments内容的场景.

main.xml看起来像这样:

<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:orIEntation="vertical"    androID:layout_wIDth="fill_parent"    androID:layout_height="fill_parent"><linearLayout androID:layout_height="wrap_content"    androID:layout_wIDth="match_parent"    androID:ID="@+ID/fragment_placeholder"></linearLayout></linearLayout>

tab1_fragment.xml是这样的:

<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"              androID:orIEntation="vertical"               androID:layout_wIDth="fill_parent"               androID:layout_height="fill_parent">    <Spinner androID:ID="@+ID/spinner1"              androID:layout_wIDth="wrap_content"              androID:layout_height="wrap_content"/></linearLayout>

和onCreate方法如下:

public voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.main);    Actionbar ab = getActionbar();    ab.setNavigationMode(Actionbar.NAVIGATION_MODE_TABS);    Actionbar.Tab newAuditTab = ab.newTab().setText(R.string.tabheader_new_audit);    Fragment newAuditFrag = new FragmentTabNewAudit();    newAuditTab.setTabListener(new TabListener(newAuditFrag));    ab.addTab(newAuditTab);    //and the same for other tabs    Spinner spinner = (Spinner) findVIEwByID(R.ID.spinner1); // this returns null    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromresource(            this,R.array.cell_array,androID.R.layout.simple_spinner_item); //cell_array is defined in strings.xml    adapter.setDropDownVIEwResource(androID.R.layout.simple_spinner_dropdown_item);    spinner.setAdapter(adapter);    spinner.setonItemSelectedListener(new MyOnItemSelectedListener());  }

通过R.ID访问main.xml中定义的视图工作正常,因此在这种情况下,问题与Eclipse的R类自动导入无关,我认为.

我想我可以通过编程方式定义微调器以解决问题,但我希望可能有更优雅的解决方案.我还不能很好地看到AndroID的大图,但还不知道在哪里看.

解决方法 由于微调器不是Activity本身的子元素,因此findVIEwByID无法找到它.由于微调器是片段的子元素,您可以尝试:
Spinner spinner = (Spinner)newAuditFrag.getVIEw().findVIEwByID(R.ID.spinner1);

但是,我不确定何时创建片段视图,因此getVIEw()也可能返回代码中该点的null.然后,您可以尝试将代码移动到onResume上,该onResume在onCreate之后调用.

总结

以上是内存溢出为你收集整理的以编程方式访问Android中片段XML中定义的视图全部内容,希望文章能够帮你解决以编程方式访问Android中片段XML中定义的视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1143689.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存