Intereting Posts
Эмулятор Android Wear и окружающий режим Распознавание изображений для приложения дополненной реальности Android В настройках выберите мой звук так же, как с помощью RingtonePreference Error: Ошибка: недопустимые типы целых чисел (в 'layout_height' со значением '10') Отключите разъем Bluetooth в Android Какая разница между пользователем системы Android и пользователем root linux Создание пользовательского диалогового окна на Android Android: сделанное фото больше, чем предварительный просмотр Изображение SVG не отображается в android 3.0+ с тем же кодом Использовать firefox как средство рендеринга для веб-просмотра Android Маржа между заголовками X-Axis и ярлыками X-Axis в AChartEngine Как исправить ошибку «Ошибка – не удалось выполнить инструменты \ android.bat, ошибка 2» в Android? SSL взаимная аутентификация FAIL на Android Client принимает сертификат серверов, но сервер не получает сертификат клиента Альтернатива веб-работнику в Android-телефоне? Как отключить «автономный режим» gradle в студии Android?

Начальная активность из фрагмента вызывает NullPointerException

Я застрял здесь с проблемой, начинающей работу с кнопки внутри фрагмента. Вот мой код:

ViewPagerAdapter.java

import java.util.List; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; public class ViewPagerAdapter extends FragmentPagerAdapter { private List<Fragment> fragments; public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragments) { super(fm); this.fragments = fragments; } @Override public int getCount() { return this.fragments.size(); } @Override public Fragment getItem(int position) { return this.fragments.get(position); } } 

ViewPagerActivity.java

 import java.util.List; import java.util.Vector; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.view.ViewPager; import android.util.Log; import com.package.here.Class1Overview; import com.package.here.Class1Overview; import com.package.here.Class1Overview; public class ViewPagerActivity extends FragmentActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.viewpager); ViewPager pager = (ViewPager)super.findViewById(R.id.my_viewpager); pager.setAdapter(initialisePaging()); } private ViewPagerAdapter initialisePaging() { List<Fragment> fragments = new Vector<Fragment>(); fragments.add(Fragment.instantiate(this, Class1Overview.class.getName())); fragments.add(Fragment.instantiate(this, Class2Overview.class.getName())); fragments.add(Fragment.instantiate(this, Class3Overview.class.getName())); return new ViewPagerAdapter(super.getSupportFragmentManager(), fragments); } } 

Class1Overview.java (Вот кнопка)

 import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.LinearLayout; import com.package.here.R; public class FuelOverview extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) { return null; } View v = (LinearLayout)inflater.inflate(R.layout.class_one_layout, container, false); View AddBtn = v.findViewById(R.id.btn_add); ((Button) AddBtn).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(getActivity(), ActivityToStart.class); startActivity(intent); } }); return v; } } 

И это мой LogCat :

 01-05 19:39:00.913: E/AndroidRuntime(10557): Uncaught handler: thread main exiting due to uncaught exception 01-05 19:39:01.034: E/AndroidRuntime(10557): java.lang.RuntimeException: Unable to pause activity {com.package.here/com.package.here.ViewPagerActivity}: java.lang.NullPointerException 01-05 19:39:01.034: E/AndroidRuntime(10557): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3162) 01-05 19:39:01.034: E/AndroidRuntime(10557): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3119) 01-05 19:39:01.034: E/AndroidRuntime(10557): at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3102) 01-05 19:39:01.034: E/AndroidRuntime(10557): at android.app.ActivityThread.access$2400(ActivityThread.java:119) 01-05 19:39:01.034: E/AndroidRuntime(10557): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1870) 01-05 19:39:01.034: E/AndroidRuntime(10557): at android.os.Handler.dispatchMessage(Handler.java:99) 01-05 19:39:01.034: E/AndroidRuntime(10557): at android.os.Looper.loop(Looper.java:123) 01-05 19:39:01.034: E/AndroidRuntime(10557): at android.app.ActivityThread.main(ActivityThread.java:4363) 01-05 19:39:01.034: E/AndroidRuntime(10557): at java.lang.reflect.Method.invokeNative(Native Method) 01-05 19:39:01.034: E/AndroidRuntime(10557): at java.lang.reflect.Method.invoke(Method.java:521) 01-05 19:39:01.034: E/AndroidRuntime(10557): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 01-05 19:39:01.034: E/AndroidRuntime(10557): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 01-05 19:39:01.034: E/AndroidRuntime(10557): at dalvik.system.NativeStart.main(Native Method) 01-05 19:39:01.034: E/AndroidRuntime(10557): Caused by: java.lang.NullPointerException 01-05 19:39:01.034: E/AndroidRuntime(10557): at android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576) 01-05 19:39:01.034: E/AndroidRuntime(10557): at android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1617) 01-05 19:39:01.034: E/AndroidRuntime(10557): at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:481) 01-05 19:39:01.034: E/AndroidRuntime(10557): at android.app.Activity.performSaveInstanceState(Activity.java:1022) 01-05 19:39:01.034: E/AndroidRuntime(10557): at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1180) 01-05 19:39:01.034: E/AndroidRuntime(10557): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3144) 01-05 19:39:01.034: E/AndroidRuntime(10557): ... 12 more 01-05 19:39:01.423: I/dalvikvm(10557): threadid=7: reacting to signal 3 

Сам ViewPager работает нормально. Кажется, что ошибка приостанавливает FragmentActivity, но я не могу понять это. Единственное, что я нашел, это сообщение на странице http://code.google.com/p/android/issues/detail?id=19917

Я также получил код примера Google, чтобы убедиться, что в основном использую тот же метод …

Изменить: чтобы убедиться, что ClickListener работает, я попробовал Toast в методе onClick – отлично работает.

Solutions Collecting From Web of "Начальная активность из фрагмента вызывает NullPointerException"

Это известная проблема, и я шокирован, обнаружив, что никто не подал ошибку на публичный трекер ошибок для этого.

Ваша проблема связана с этим:

 if (f.mSavedViewState != null) { if (result == null) { result = new Bundle(); } result.putSparseParcelableArray( FragmentManagerImpl.VIEW_STATE_TAG, f.mSavedViewState); } if (!f.mUserVisibleHint) { // Only add this if it's not the default value result.putBoolean(FragmentManagerImpl.USER_VISIBLE_HINT_TAG, f.mUserVisibleHint); } 

Вы должны заметить, что если result является null входящий в этот код, а первый, if не запущен, вы получите NullPointerException если мы введем второй if .

Он должен гласить:

 if (f.mSavedViewState != null) { if (result == null) { result = new Bundle(); } result.putSparseParcelableArray( FragmentManagerImpl.VIEW_STATE_TAG, f.mSavedViewState); } if (!f.mUserVisibleHint) { if (result == null) { result = new Bundle(); } // Only add this if it's not the default value result.putBoolean(FragmentManagerImpl.USER_VISIBLE_HINT_TAG, f.mUserVisibleHint); } 

Я отправил патч для этой недели или два назад: https://android-review.googlesource.com/31261

Быстрое исправление

 class MyFragment extends Fragment { @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); setUserVisibleHint(true); } 

И ждите обновления в безопасном режиме 🙂

Согласно сообщению здесь , вы должны использовать FragmentStatePagerAdapter, а не FragmentPagerAdapter. У меня была та же проблема, которую вы описали, и чтобы этот переключатель работал для меня.

У меня была такая же проблема – проблема для меня была вызвана, когда я добавил новый фрагмент в мой проект с пустым макетом. Кажется, что если ничто не сохраняется в пакете во время Fragment.onSaveInstanceState(Bundle outState) оно вызывает исключение нулевого указателя в FragmentManagerImpl.saveFragmentBasicState .

Добавление некоторых представлений к моим макетам устранило проблему (после того, как я провел время, ударив головой о стену). Использование библиотеки поддержки android v4 версии 10.

Также при использовании ListView в качестве корня для макета фрагмента, если в списке нет элементов, вы также получите крах. В классе фрагмента переопределите onSaveInstanceState чтобы добавить некоторые данные в пакет:

 @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("DO NOT CRASH", "OK"); }