2014-12-29 3 views
0

Я хочу отправить некоторые данные из активности в NavigationDrawerFragment. Вот код, который у меня есть; большая часть кода была порождена Android Studio, код, который я добавил указывается в комментарии:Android - отправка данных из Activity в NavigationDrawerFragment

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mNavigationDrawerFragment = (NavigationDrawerFragment) 
      getSupportFragmentManager().findFragmentById(R.id.navigation_drawer); 

    // my code starts 
    Bundle bundle = new Bundle(); 
    bundle.putInt("num", 123); 
    mNavigationDrawerFragment.setArguments(bundle); 
    // my code ends 

    mTitle = getTitle(); 

    // Set up the drawer. 
    mNavigationDrawerFragment.setUp(
      R.id.navigation_drawer, 
      (DrawerLayout) findViewById(R.id.drawer_layout)); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    mDrawerListView = (ListView) inflater.inflate(
      R.layout.fragment_navigation_drawer, container, false); 
    mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      selectItem(position); 
     } 
    }); 
    int num = getArguments().getInt("num"); // my code 
    mDrawerListView.setAdapter(new ArrayAdapter<String>(
      getActionBar().getThemedContext(), 
      android.R.layout.simple_list_item_activated_1, 
      android.R.id.text1, 
      new String[]{ 
        getString(R.string.title_section1), 
        getString(R.string.title_section2), 
        getString(R.string.title_section3), 
      })); 
    mDrawerListView.setItemChecked(mCurrentSelectedPosition, true); 
    return mDrawerListView; 
} 

Когда я запустить приложение я NullPointerException: Attempt to invoke virtual method 'int android.os.Bundle.getInt(java.lang.String)' on a null object reference. Как я могу исправить эту проблему? Спасибо!

ответ

1

Поскольку ваш NavigationDrawerFragment статически объявлен в макете, то в настоящее время экземпляр, как активность выложена - то есть, при вызове setContentView() - и его метод onCreateView() работает до вашего вызова setArguments(). Кроме того, setArguments() не может быть вызван на фрагмент, как только он был прикреплен к Activity, что происходит автоматически из-за статического объявления фрагмента. Если вы хотите передать данные в уже активный фрагмент, простой способ - создать публичный метод в своем классе и вызвать его в экземпляре после его инициализации.

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