19.02.2015, 13:33. Просмотров 1130. Ответов 2
Внутри onCreate происходит проверка физических размеров устройства. Если функция проверки возвращает tablet то подгружаем основную активность, в которой объявлены три фрагмента сразу. Если функция проверки возвращает phone , то тогда грузим активность c ViewPager и проводим его инициализацию. Проблема в том как обратиться к фрагмента во втором случае. Представленный код при первой же попытке обращения к фрагменту по id приводит к NullPointerExeption, что вполне понятно, так как фрагмент подгружается динамически в адаптере. В принципе понятно, что нужно ссылаться на объект который создается к классе адаптера, но я никак не могу допереть как это сделать.
Java |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
inSys = new InSys(); //Объект бибилиотеки технических функций
if (inSys.checkDeviceType(this) =="tablet") { //Проверяем размер экрана, если программа запущена на планшете
setContentView(R.layout.activity_main); //то загружаем обычную активноть
} else { //если же программа запущена на телефоне
setContentView(R.layout.activity_main_phone); //то загружаем активность с ViewPager и проводим его инициализацию
mMainPager = (ViewPager)findViewById(R.id.main_pager);
mPagerAdapter = new ScreenSliderPagerAdapter(getSupportFragmentManager());
mMainPager.setAdapter(mPagerAdapter);
}
context = getApplicationContext(); //Получить текущий контекст
android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager(); //Медеждер фрагментов
fragment1 = (Fragment1)fragmentManager.findFragmentById(R.id.fragment1); //Создание объекта фрагмента белки
fragment2 = (Fragment2)fragmentManager.findFragmentById(R.id.fragment2); //Создание объекта фрагмента жиры
fragment3 = (Fragment3)fragmentManager.findFragmentById(R.id.fragment3); //Создание объекта фрагмента углеводы
tvProtSum = (TextView)fragment1.rootView.findViewById(R.id.protSum); |
|
Последняя строка тут как раз ведет в никуда.
Адаптер
Java |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| private class ScreenSliderPagerAdapter extends FragmentStatePagerAdapter { //Подкласс адаптера отвечаюзего за инициализацию
public ScreenSliderPagerAdapter(android.support.v4.app.FragmentManager fm) { //компонента PageViewer если программу запустили
super(fm); // на устройтсве с малым размером экрана
}
@Override
public Fragment getItem(int i) {
Fragment fragment = null;
if (i == 0) {
fragment = new Fragment1();
}
if (i == 1) {
fragment = new Fragment2();
}
if (i == 2) {
fragment = new Fragment3();
}
return fragment;
}
@Override
public int getCount() {
return NUM_PAGES;
}
} |
|
Активность под планшет
XML |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="100">
<fragment
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:name="ru.cerber.kkal.ui.MainActivity.Fragment1"
android:id="@+id/fragment1"
android:layout_margin="10dp"
android:layout_weight="33"
tools:layout="@layout/fragment1" />
<fragment
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:name="ru.cerber.kkal.ui.MainActivity.Fragment2"
android:id="@+id/fragment2"
android:layout_margin="10dp"
android:layout_weight="33"
tools:layout="@layout/fragment2" />
<fragment
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:name="ru.cerber.kkal.ui.MainActivity.Fragment3"
android:id="@+id/fragment3"
android:layout_margin="10dp"
android:layout_weight="33"
tools:layout="@layout/fragment3" />
</LinearLayout> |
|
И под телефон
XML |
1
2
3
4
5
6
| <?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main_pager"/> |
|