2015-03-03 4 views
-1

Я хочу заменить фрагмент на кнопку щелчка в окне просмотра.замените фрагмент на кнопку щелчка зрителя

viewholder

static class ViewHolder { 
Button button; 
TextView title; 
} 

адаптер класс Fragmenta, который состоит ListView

viewHolder.button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      FragmentA fragmentA = new FragmentA(); 
      fragmentA.nextFragment(); 
     } 
    }); 

Fragmenta

public void nextFragment(){ 
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.container, new FragmentB()).commit(); 
} 

давая NullPointerException при замене фрагмента

logcat

java.lang.NullPointerException 
      at com.example.testapp.fragment.FragmentA.nextFragment(FragmentA.java:75) 
      at com.example.testapp.adapter.FragmentAListAdapter$1.onClick(FragmentAListAdapter.java:54) 
      at android.view.View.performClick(View.java:4222) 
      at android.view.View$PerformClick.run(View.java:17620) 
      at android.os.Handler.handleCallback(Handler.java:800) 
      at android.os.Handler.dispatchMessage(Handler.java:100) 
      at android.os.Looper.loop(Looper.java:194) 
      at android.app.ActivityThread.main(ActivityThread.java:5370) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:525) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
      at dalvik.system.NativeStart.main(Native Method) 
+0

показать свой лог-код? –

+0

в аргументе адаптера передать экземпляр Fragment Manager и использовать его для замены фрагмента –

+0

спасибо .. это сработало, но как добавить его обратно в стек? я попытался добавить его в backstack, но при нажатии, экран был пуст – user3237043

ответ

1

Попробуйте сделать вашу следующую функцию фрагментации в вашей деятельности. Как это: -

public static void nextfragment(FragmentManager activity,Fragment fragment) { 
     if (fragment == null) { 
      return; 
     } 
     try { 
      activity.popBackStack(); 
      FragmentTransaction transaction = activity.beginTransaction(); 
      transaction.replace(R.id.fragment_container, fragment).addToBackStack(null); 
      transaction.commit(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 

и использовать его, когда-либо вам нужно использовать экземпляр getactivity.

((MainActivity)getActivity()).nextfragment(); 
Смежные вопросы