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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android При выводе ArrayList<T> выводит последние элементы http://www.cyberforum.ru/android-dev/thread1569731.html
Класс Words:public class Words { public int Id; public String WordEnglish; public String WordRussian; public String Transcription; public int Category; } Метод заполнения списка ArrayList<Words>: public ArrayList<Words> GetAllWords(SQLiteDatabase db){ ArrayList <Words> allWords = new ArrayList<>();
Android Как тестировать клиент-серверные приложения? У меня есть пара вопросов: 1) Что делать, если эмулятор не запускается ни в эклипсе, ни в андроид студио? 2) Как тестить клиент- серверные приложения? http://www.cyberforum.ru/android-dev/thread1569349.html
Смена языка для своего приложения Android
Доброго времени суток. Как мне реализовать смену языка у своего приложения? При загрузки у меня есть Активити где я выбираю язык 1 из 3. Я попытался передать главному Активити строку с названием языка пример: Intent intent; intent = new Intent(this,MainActivity.class); intent.putExtra("language","english"); startActivity(intent); Обработка полученных данных.
Android GetIdentifier всегда возвращает 0
Здравствуйте, хочу сменить изображение у imageView, для этого нужно найти id ресурса. Проблема в том, что getIdentifier возвращает всегда 0. String imgName = "bomb_" + rnd.nextInt(4); int resID = Resources.getSystem().getIdentifier(imgName, "drawable", this.getPackageName()); Log.d("random", imgName + " " + resID); imgBomb.setBackgroundResource(resID); Проверял прямой ссылкой...
Android Sip клиент http://www.cyberforum.ru/android-dev/thread1569115.html
Здравствуйте форумчане) Возможно ли написать sip клиент и есть ли существующие примеры?? хотелось бы что нибудь похожее на viber или skype (просто телефонный разговор) наваять для маленькой конторы))
Android Кадровая анимация Здравствуйте. Какие есть способы, кроме AnimationDrawable отобразить кадровую анимацию? С AnimationDrawable постоянно получаю OutOfMemory. Пробовал просто менять каждые n секунд картинку - жуткие тормоза. Связяно это все конечно с тем, что кадры для анимации слишком большие, но не всегда есть возможность их заранее пожать под нужные размеры. Может есть способ оптимизировать исходную картинку... подробнее

Показать сообщение отдельно
Kotleee
0 / 0 / 0
Регистрация: 03.11.2015
Сообщений: 1

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

03.11.2015, 08:49. Просмотров 227. Ответов 2
Метки (Все метки)

Здравствуйте! Такая проблема, у меня есть приложение, в котором 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>

Пожалуйста, подскажите любой способ решения проблемы, можно и структуру проекта поменять, главное чтобы заработало нормально! Заранее спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru