Программный доступ к представлению, которое определено в XML фрагмента в Android

Я в процессе создания приложения для Android 3 с навигацией по вкладкам. Будучи новичком в Android, я искал руководства по вкладкам и нашел несколько разных подходов, из которых реализация, основанная на Fragments + ActionBar, оказалась лучшей. Я следил за этими руководствами

http://www.abelski.com/courses/android3ui/actionbar.pdf (последние несколько слайдов) и http://www.youtube. com / watch? v = gMu8XhxUBl8 (тот же урок в видеоформате)

... и дошел до точки, когда появляются вкладки, я могу переключаться между ними нормально, и простые TextView внутри них отображаются нормально.

Теперь возникают проблемы, когда я хочу, чтобы на одной из вкладок был виджет счетчика, который определен в XML-файле фрагмента, и заполнял его элементами, которые определены в файле strings.xml. Когда я пытаюсь получить доступ к счетчику с помощью getViewById () из метода onCreate () , я всегда получаю в результате нулевое значение.

Насколько я понимаю, чтобы исправить это, мне нужно каким-то образом объявить XML фрагмента (аналогично тому, как основной макет был сделан с помощью setContentView (R.layout.main) ), чтобы getViewById () знает, где искать счетчик (хотя автозаполнение Eclipse уже находит его).Однако я совершенно не понимаю, как это сделать, поскольку ни одно из руководств не рассматривало сценарий, в котором вы хотите изменить содержимое XML-фрагментов внутри кода.

main.xml выглядит так:








tab1_fragment.xml вот так:




    

и метод 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 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());  
}

Доступ к представлениям, которые определены в main.xml через R.id, работает нормально, поэтому Думаю, в данном случае проблема не связана с автоматическим импортом класса R.

Думаю, я мог бы определить счетчик программно, чтобы обойти проблему, но, надеюсь, есть более элегантное решение. Я еще недостаточно хорошо вижу общую картину Android, чтобы знать, где искать.

6
задан tway 29 September 2011 в 13:11
поделиться