Управление фрагментами в панели навигации

Я скопировал панель навигации с http://javatechig.com/android/navigation-drawer-android-example Но у меня проблемы с управлением фрагментами, а точнее основным содержимым на экране.

@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mTitle = "Formulas";
    getActionBar().setTitle(mTitle);

    // Getting reference to the DrawerLayout
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

    mDrawerList = (ListView) findViewById(R.id.drawer_list);

    // Getting reference to the ActionBarDrawerToggle
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.ic_drawer, R.string.drawer_open,
            R.string.drawer_close) {

        /** Called when drawer is closed */
        public void onDrawerClosed(View view) {
            getActionBar().setTitle(mTitle);
            invalidateOptionsMenu();

        }

        /** Called when a drawer is opened */
        public void onDrawerOpened(View drawerView) {
            getActionBar().setTitle("Formulas");
            invalidateOptionsMenu();
        }

    };

    // Setting DrawerToggle on DrawerLayout
    mDrawerLayout.setDrawerListener(mDrawerToggle);

    // Creating an ArrayAdapter to add items to the listview mDrawerList
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getBaseContext(), 
            R.layout.drawer_list_item, getResources().getStringArray(R.array.menus));

    // Setting the adapter on mDrawerList
    mDrawerList.setAdapter(adapter);

    // Enabling Home button
    getActionBar().setHomeButtonEnabled(true);

    // Enabling Up navigation
    getActionBar().setDisplayHomeAsUpEnabled(true);

    // Setting item click listener for the listview mDrawerList
    mDrawerList.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            // Getting an array of rivers
            String[] menuItems = getResources().getStringArray(R.array.menus);

            // Currently selected river
            mTitle = menuItems[position];

            // Creating a fragment object
            WebViewFragment rFragment = new WebViewFragment();

            // Passing selected item information to fragment
            Bundle data = new Bundle();
            data.putInt("position", position);
            data.putString("url", getUrl(position));
            rFragment.setArguments(data);



            // Getting reference to the FragmentManager
            FragmentManager fragmentManager = getFragmentManager();

            // Creating a fragment transaction
            FragmentTransaction ft = fragmentManager.beginTransaction();

            // Adding a fragment to the fragment transaction
            ft.replace(R.id.content_frame, rFragment);

            // Committing the transaction
            ft.commit();

            // Closing the drawer
            mDrawerLayout.closeDrawer(mDrawerList);

        }
    });
}




protected String getUrl(int position) {
    switch (position) {
    case 0:
        return "http://javatechig.com";
    case 1:
        return "http://javatechig.com/category/android/";
    case 2:
        return "http://javatechig.com/category/blackberry/";
    case 3:
        return "http://javatechig.com/category/j2me/";
    case 4:
        return "http://javatechig.com/category/sencha-touch/";
    case 5:
        return "http://javatechig.com/category/phonegap/";
    case 6:
        return "http://javatechig.com/category/java/";
    default:
        return "http://javatechig.com";
    }
}

Как мне управлять фрагментом, чтобы я мог: - Вводить либо базовый xml/java (чтобы не заморачиваться с бандлами) в проекте, либо - заменять текущий фрагмент, чтобы я мог создать свой собственный и настроить все сам


person Hultan    schedule 30.12.2013    source источник
comment
На самом деле я не совсем уверен, в чем ваш вопрос. Пакеты предназначены для передачи данных во фрагмент, которые вы можете отображать в нем и т. д. Можете ли вы еще раз указать, в чем заключается ваш конкретный вопрос?   -  person Kovács Imre    schedule 30.12.2013


Ответы (2)


Я предполагаю, что это пример кода из проекта Android, поставляемого с SDK. Ваш образец фактически содержит код, необходимый для замены фрагментов на панели содержимого действия.

    // Getting reference to the FragmentManager
    FragmentManager fragmentManager = getFragmentManager();

    // Creating a fragment transaction
    FragmentTransaction ft = fragmentManager.beginTransaction();

    // Adding a fragment to the fragment transaction
    ft.replace(R.id.content_frame, rFragment);

    // Committing the transaction
    ft.commit();

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

private void replaceFragment(Fragment newFragment) {
    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction ft = fragmentManager.beginTransaction();
    ft.replace(R.id.content_frame, newFragment);
    ft.commit();
}

Если ваш загружаемый фрагмент требует передачи ему данных, вы можете использовать метод Bundle. Ваши фрагменты могут принимать разные типы данных, но приведенный выше код по-прежнему применяется. Вызовите его после того, как вы вызвали setArguments() для вашего объекта Fragment.

person Kovács Imre    schedule 30.12.2013
comment
Как будет выглядеть команда вызова? replaceFragment(/*Что здесь будет написано?*/); - person Hultan; 01.01.2014
comment
Вы можете позвонить туда, где вам это нужно. Например. вы получаете данные из базы данных в своем классе Activity и хотите отобразить их в новом фрагменте. Вы создаете новый фрагмент (например, DataTableFragment, фрагмент подкласса в отдельном классе), создаете Bundle, помещаете в него некоторые аргументы, вызываете setArguments(Bundle...) для вновь созданного объекта DataTableFragment и считываете аргументы в onCreateView. () в вашем классе DataTableFragment и т. д. Вы можете изучить основы, описанные на сайте разработчиков Android: developer.android.com/guide/components/fragments.html - person Kovács Imre; 01.01.2014

Попробуйте проверить этот ответ ..

Это поможет вам настроить и использовать панель навигации динамичным образом...

https://stackoverflow.com/a/34244065/2457493

Надеюсь, это удовлетворит ваш запрос.

person samridhgupta    schedule 28.03.2016