Форум программистов, компьютерный форум CyberForum.ru

BaseActivity with drawer + MainActivity + google tabs with view pager = NullPointerException - Android

Восстановить пароль Регистрация
 
Kotleee
0 / 0 / 0
Регистрация: 03.11.2015
Сообщений: 1
03.11.2015, 08:49     BaseActivity with drawer + MainActivity + google tabs with view pager = NullPointerException #1
Здравствуйте! Такая проблема, у меня есть приложение, в котором drawer должен быть во всех разделах, разделов много, у каждого раздела есть свои табы, у меня они реализованы через специальную библиотеку для создания идентичных google play табов, тут же внутри view pager - мы можем листать табы. drawer у меня инициализируется в BaseActivity, MainActivity наследуется от неё. Всё остальное приложение сделано на фрагментах (каждый раздел со своими вкладками начинается с parent fragment, в котором мы делаем set view pager для трёх наследуемых фрагментов, и тут всё работает отлично), но когда я пытаюсь сделать то же самое для MainActivity, которая является началом самого первого раздела приложения, у меня выпадает null pointer : java.lang.RuntimeException:Unable to start activity ComponentInfo{com.ooosis.manzjetov.ivan.barviha_mobile/com.ooosis.manzjetov.ivan.barviha_mobile.Activities.MainActivity}: java.lang.NullPointerException и ругается на эту строку viewPager_main.setAdapter(mainAdapter);
вот код :

BaseActivity

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
package com.ooosis.manzjetov.ivan.barviha_mobile.Activities;
 
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.FrameLayout;
import android.widget.ListView;
 
import com.ooosis.manzjetov.ivan.barviha_mobile.Adapters.NavigationDrawerAdapter;
import com.ooosis.manzjetov.ivan.barviha_mobile.Fragments.AboutUsFragment;
import com.ooosis.manzjetov.ivan.barviha_mobile.Fragments.BonusCardFragment;
import com.ooosis.manzjetov.ivan.barviha_mobile.Fragments.ContactsFragment;
import com.ooosis.manzjetov.ivan.barviha_mobile.Fragments.MapFragment;
import com.ooosis.manzjetov.ivan.barviha_mobile.Fragments.PhotoGalleryFragment;
import com.ooosis.manzjetov.ivan.barviha_mobile.Fragments.ProfileFragment;
import com.ooosis.manzjetov.ivan.barviha_mobile.Fragments.QuestionsFragment;
import com.ooosis.manzjetov.ivan.barviha_mobile.NavigationItem;
import com.ooosis.manzjetov.ivan.barviha_mobile.R;
 
public class BaseActivity extends AppCompatActivity {
 
    private static int position;
 
    private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    private ActionBarDrawerToggle mDrawerToggle;
    private NavigationItem navigationItemGallery;
 
    private int notifNumber;
 
    private NavigationDrawerAdapter adapter;
    protected Toolbar toolbar;
    protected FrameLayout frameLayout;
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.base_activity);
 
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
        setSupportActionBar(toolbar);
 
 
    }
 
    @Override
    public void onBackPressed() {
        if(mDrawerLayout.isDrawerOpen(mDrawerList)) {
            mDrawerLayout.closeDrawer(mDrawerList);}
        else {
            super.onBackPressed();
        }
    }
 
    public void set(final String[] navMenuTitles) {
 
 
        NavigationDrawerAdapter adapter  = new NavigationDrawerAdapter(this);
 
 
        frameLayout = (FrameLayout)findViewById(R.id.content_frame);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.left_drawer);
 
 
 
        String[] menuItemsIcon = getResources().getStringArray(R.array.nav_item_icons);
 
        int res = 0;
        for (String navMenuTitle : navMenuTitles) {
 
            notifNumber = 1;
 
            int id_title = getResources().getIdentifier(navMenuTitle, "string", this.getPackageName());
            int id_icon = getResources().getIdentifier(menuItemsIcon[res], "drawable", this.getPackageName());
            NavigationItem navigationItem = new NavigationItem(id_title, id_icon);
            if (res == 2) {
                navigationItemGallery = navigationItem;
                navigationItem.counter = notifNumber;
            }
            adapter.addItem(navigationItem);
            res++;
        }
 
        if (mDrawerList != null) {
            mDrawerList.setAdapter(adapter);
        }
        mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
 
 
 
 
        if (getSupportActionBar() != null) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 
        }
 
        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                R.string.app_name, // nav drawer open - description for
             
                R.string.app_name // nav drawer close - description for
               
        ) {
            public void onDrawerClosed(View view) {
                invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
            }
 
            public void onDrawerOpened(View drawerView) {
                getSupportActionBar().setTitle(getString(R.string.app_name));
                invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
 
            }
 
 
        };
 
 
        final View.OnClickListener originalToolbarListener = mDrawerToggle.getToolbarNavigationClickListener();
 
        getSupportFragmentManager().addOnBackStackChangedListener(
                new FragmentManager.OnBackStackChangedListener() {
                    @Override
                    public void onBackStackChanged() {
                        if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
                            mDrawerToggle.setDrawerIndicatorEnabled(false);
                        } else {
                            mDrawerToggle.setDrawerIndicatorEnabled(true);
                            mDrawerToggle.setToolbarNavigationClickListener(originalToolbarListener);
                        }
                    }
                });
 
 
    }
 
    private class SlideMenuClickListener implements ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            displayView(position);
        }
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(getSupportFragmentManager().getBackStackEntryCount() == 0 || getSupportFragmentManager().getBackStackEntryCount() == 1) {
            if (item.getItemId() == android.R.id.home) {
                if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
                    mDrawerLayout.closeDrawer(mDrawerList);
                } else {
                    mDrawerLayout.openDrawer(mDrawerList);
                }
            }
        }
        return super.onOptionsItemSelected(item);
    }
 
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        return super.onPrepareOptionsMenu(menu);
    }
 
    private void displayView(int position) {
        BaseActivity.position = position;
 
        Fragment fragment = null;
        switch (position) {
            case 0:
                fragment = new ProfileFragment();
                break;
            case 1:
                fragment = new AboutUsFragment();
                break;
            case 2:
                fragment = new PhotoGalleryFragment();
                notifNumber = 0;
                navigationItemGallery.counter = notifNumber;
 
                invalidateOptionsMenu();
                break;
            case 3:
                fragment = new QuestionsFragment();
                break;
            case 4:
                fragment = new BonusCardFragment();
                break;
            case 5:
                fragment = new ContactsFragment();
                break;
            case 6:
                fragment = new MapFragment();
                break;
            default:
                break;
        }
        if (fragment != null) {
            android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.content_frame, fragment)
                    .addToBackStack(null)
                    .commit();
 
        } else {
            Log.e(this.getClass().getName(), "Error. Fragment is not created");
        }
 
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        mDrawerLayout.closeDrawer(mDrawerList);
    }
 
 
    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        mDrawerToggle.syncState();
    }
 
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        // Pass any configuration change to the drawer toggls
        mDrawerToggle.onConfigurationChanged(newConfig);
    }
}
MainActivity

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package com.ooosis.manzjetov.ivan.barviha_mobile.Activities;
 
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.MenuItem;
 
import com.astuetz.PagerSlidingTabStrip;
import com.ooosis.manzjetov.ivan.barviha_mobile.Adapters.SaleAdapter;
import com.ooosis.manzjetov.ivan.barviha_mobile.Fragments.FeedFragment;
import com.ooosis.manzjetov.ivan.barviha_mobile.Fragments.MainFragment;
import com.ooosis.manzjetov.ivan.barviha_mobile.Preferences;
import com.ooosis.manzjetov.ivan.barviha_mobile.R;
 
 
public class MainActivity extends BaseActivity {
 
    SaleAdapter mSaleAdapter;
    ViewPager mViewPager;
 
 
    FragmentPagerAdapter mainAdapter;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getLayoutInflater().inflate(R.layout.activity_main, frameLayout);
 
        ViewPager viewPager_main = (ViewPager)findViewById(R.id.view_pager);
 
        mainAdapter = new MainAdapter(getSupportFragmentManager(),MainActivity.this);
        viewPager_main.setAdapter(mainAdapter);
 
        PagerSlidingTabStrip tabs = (PagerSlidingTabStrip)findViewById(R.id.tabs);
        tabs.setViewPager(viewPager_main);
 
       
      <...>
 
        String[] navMenuItems = getResources().getStringArray(R.array.nav_drawer_items);
        set(navMenuItems);
 
        if (savedInstanceState == null) {
            android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.content_frame, new MainFragment())
//                    .addToBackStack(null)
                    .commit();
        }
    }
 
   
 
    public class MainAdapter extends FragmentPagerAdapter {
        private int NUM_ITEMS = 3;
        private String[] titles;
        private Context context;
 
        public MainAdapter(FragmentManager fm, Context context) {
            super(fm);
            this.context = context;
 
            Resources res = getResources();
            titles = res.getStringArray(R.array.main_title_items);
        }
 
        @Override
        public int getCount() {
            return NUM_ITEMS;
        }
 
        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    return new MainFragment();
                //case 1:
                   // return new EventFragment();
 
                case 2:
                    return new FeedFragment();
                default:
                    return null;
            }
        }
 
        @Override
        public CharSequence getPageTitle(int position) {
            return titles[position];
        }
    }
 
 
}
activity_base.xml
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
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <include
        android:id="@+id/toolbar_actionbar"
        layout="@layout/toolbar_default"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
 
    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/toolbar_actionbar">
 
        <FrameLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
 
        <!-- The navigation drawer -->
        <ListView android:id="@+id/left_drawer"
            android:layout_width="260dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:choiceMode="singleChoice"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp"
            android:background="#FFFFFF"/>
 
    </android.support.v4.widget.DrawerLayout>
</RelativeLayout>
activity_main.xml

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
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <com.astuetz.PagerSlidingTabStrip
      android:id="@+id/tabs"
      android:layout_width="match_parent"
      android:layout_height="48dip"
      app:pstsShouldExpand="true"
      app:pstsTextAllCaps="true"/>
 
  <android.support.v4.view.ViewPager
      android:id="@+id/view_pager"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="@drawable/bcgr"
      android:layout_below="@+id/tabs">
 
  </android.support.v4.view.ViewPager>
 
</FrameLayout>

Пожалуйста, подскажите любой способ решения проблемы, можно и структуру проекта поменять, главное чтобы заработало нормально! Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2015, 08:49     BaseActivity with drawer + MainActivity + google tabs with view pager = NullPointerException
Посмотрите здесь:

Android Notification - запуск MainActivity
Android SplashScreen не дает запуститься MainActivity
Eclipse не генерирует MainActivity и layout-файл Android
Не создается MainActivity.java Android
Android Не могудобраться из MainActivity к etNum1, который в PlaceholderFragment
Доступ к полям MainActivity Android
Обращение к функции находящейся не в MainActivity Android
Android View Pager разные фрагменты на страницах, не понимаю как?
Переделать MainActivity в Fragment Android
MainActivity AsyncTask Android
OnClickListener не может вызвать метод с MainActivity Android
View Pager с картинками Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
не спать!
1874 / 1608 / 496
Регистрация: 12.05.2014
Сообщений: 5,813
Завершенные тесты: 1
03.11.2015, 09:55     BaseActivity with drawer + MainActivity + google tabs with view pager = NullPointerException #2
много кода
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
03.11.2015, 10:14     BaseActivity with drawer + MainActivity + google tabs with view pager = NullPointerException #3
Цитата Сообщение от Kotleee Посмотреть сообщение
Java
1
getLayoutInflater().inflate(R.layout.activity_main, frameLayout);
А вот это что? Там разве не должно быть
Java
1
setContentView(R.layout.activity_main);
В вашем коде вьюшка инфлейтится но вникуда. И активити остается пустой, конечно в ней ничего найти не выйдет и viewPager_main будет равен null.
Yandex
Объявления
03.11.2015, 10:14     BaseActivity with drawer + MainActivity + google tabs with view pager = NullPointerException
Ответ Создать тему
Опции темы

Текущее время: 12:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru