我正在制作一个具有基于标签的导航的
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的大图,但还不知道在哪里看.