2014-11-11 9 views
1

Я работаю над App, где я прикрепляю 5 фрагментов к активности. Все работает отлично, но когда я помещаю свое приложение в фоновом режиме из любого фрагмента, и через некоторое время, когда мое приложение возобновится, он сработает. Я получаю ссылку на свою Activity как null. Вот мой кодПолучение Nullpointerexception в фрагменте

Это код в Activty от того, где я прилагаю фрагмент,

FragmentManager fragmentManager = getSupportFragmentManager(); 
    searchFragment = SearchFragment.newInstance(MainBaseActivity.this); 
    fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.add(R.id.frameLayoutMain, searchFragment, "SearchFragment"); 
    fragmentTransaction.commit(); 

И это мой класс Фрагмент

public static SearchFragment newInstance(MainBaseActivity mainBaseActivity) { 

    fragment = new SearchFragment(); 
    fragment.mainBaseActivity = mainBaseActivity; 
    fragment.inflater = (LayoutInflater) mainBaseActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    fragment.myApplication = ((MyApplication) mainBaseActivity.getApplicationContext()); 
    return fragment; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.search_fragment, container, false); 

    preferences = mainBaseActivity.getSharedPreferences(Constant.CHAI_APP, Context.MODE_PRIVATE); // here i get null pointer 
    editor = preferences.edit(); 

    return view; 
} 
+0

Вы знаете. Мне действительно нравятся stacktraces с вопросами. Поэтому, пожалуйста, опубликуйте его. –

ответ

1

Фрагменты могут быть убиты и воссозданы системой в разное время. Вы не можете доверять тому, какую инициализацию вы делаете в своем newInstance() - когда фрагмент будет воссоздан, поля не будут инициализированы.

Удалить эти инициализации:

fragment.mainBaseActivity = mainBaseActivity; 
fragment.inflater = (LayoutInflater) mainBaseActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
fragment.myApplication = ((MyApplication) mainBaseActivity.getApplicationContext()); 

и использовать getActivity() в вашем фрагменте, когда вам нужно получить доступ к вашему хостингу деятельности или Application.

Для надувных батарей один уже передан как аргумент onCreateView(). Не нужно брать его самостоятельно.

(Чтобы передать Params в виде фрагмента, которые сохраняются в течение фрагмента отдыха, используйте setArguments().)

+0

Спасибо за ваше предложение, я сделаю так, как вам предложили. – Avinash

1

Фрагмент имеет метод getActivity() для получения той деятельности, которой прилагается. Используйте его вместо mainBaseActivity

+0

Я использовал это, но получил его как null также – Avinash

+0

Я не вижу его в любом месте – Blackbelt

+0

Я имел в виду, что я использовал getActivity() в месте mainbaseactivity, но получил нулевой указатель в этом случае также – Avinash

Смежные вопросы