Как правильно разместить мои действия в Tutorial's Bottom Navigation? - PullRequest
0 голосов
/ 10 ноября 2018

Я новичок в программировании. У меня есть 4 рабочих мероприятия с 4 макетами XML. Я также скопировал этот простой фрагмент примера (я думаю, что мне нужно 4 из них для моих 4 активностей) из учебника:

public class SelectFriends extends Fragment {


    public SelectFriends () {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_SelectFriends , container, false);
    }

}

Это соответствующая часть от MainActivity:

 @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {

        switch (item.getItemId()){
            case R.id.navigation_item1:
                getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.fade_in, R.anim.fade_out).replace(R.id.container, SelectFriends).commit();
                return true;

            case R.id.navigation_item2:
                getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.fade_in, R.anim.fade_out).replace(R.id.container, StartFood).commit();
                return true;
[...]

        }
        return false;
    }

Я могу запустить файл selectFriends.xml моего activitie, когда заменил фрагмент_SelectFriends в @Override public View onCreateView на идентификатор файла selectFriends.xml. Проблема в том, что я не знаю, куда поместить соответствующее действие, поэтому файл selectFriends.xml корректно отображается с BottomNavigation, но, конечно, взаимодействие невозможно. Что такое лучшая практика? Интернет сбивает меня с толку: я понимаю, использование фрагментов неверно? Я даже не понимаю, почему я должен делать фрагменты с помощью BottomNavigation, когда вещи, которые я хочу показать на разных экранах BottomNavigation, полностью отличаются друг от друга. Спасибо

1 Ответ

0 голосов
/ 11 ноября 2018

Начнем с вашего вопроса:

Как правильно разместить мои действия в Tutorial's Bottom Navigation?

Вы не будете размещать свои действия в нижней навигации.

У вас будет один Activity, который будет рисовать макет вашего экрана. Во-вторых, у вас будет количество Fragment, которые будут представлять некоторые части вашего экрана.

Сколько Fragment х? Столько, сколько вариантов нижней навигации. Возьмите приложение Youtube в качестве примера.

image

Весь экран представляет собой Activity, основной вид деятельности Youtube. Как вы можете видеть пользователь нажал Подписки в нижней навигации , поэтому MainActivity вызвал SubscriptionsFragment, чтобы нарисовать часть экрана с подписками (весь макет, кроме ActionBar вверху и нижняя навигация внизу.

Если пользователь выбирает Домой в нижней навигационной панели, тогда MainActivity заменит ту часть экрана, где SubscriptionsFragment рисует свой макет, макетом HomeFragment. И то же самое произойдет с другими параметрами нижней навигационной панели Youtube.

Итак, чтобы уточнить. Здесь только одно занятие . MainActivity. Не четыре . Это действие дает команду 4 фрагментам, чтобы нарисовать 4 основные части экрана (домашняя часть с HomeFragment, трендовая часть с TrendingFragment, подписная часть с SubscriptionFragment и, наконец, библиотечная часть с LibraryFragment.

Из вашего последнего комментария:

Я должен поместить два фрагмента кода, которые я выложил выше, в один большой класс

Нет, ты не обязан. Нет необходимости создавать один файл, например MainActivity.java (где определен ваш MainActivity), а затем определять классы Fragment внутри того же файла.

Вы хотите отобразить 4 экрана, используя нижнюю навигацию, верно? Создайте файл для своей деятельности и четыре отдельных файла, по одному на Fragment.

Пример:

Ваш первый файл, SelectFriends.java, где определен фрагмент SelectFriends, как вы опубликовали выше ...

public class SelectFriends extends Fragment {


    public SelectFriends () {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_SelectFriends , container, false);
    }

}

Еще три отдельных файла, как этот, по одному на фрагмент.

И, наконец, ваша деятельность, как вы уже писали выше.

public class MainActivity extends AppCompatActivity{

    @Override
    public void onCreate(Bundle savedInstanceState){
      // ... some code here
    }

    @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {

            switch (item.getItemId()){
                case R.id.navigation_item1:
                    ..
                // Here the activity figured out that the first item of the bottom navigation
                // was clicked, so it calls the support fragment manager to display a fragment
                // inside the container view
                    getSupportFragmentManager().beginTransaction()
                    .setCustomAnimations(R.anim.fade_in, R.anim.fade_out)
                    .replace(R.id.container, SelectFriends).commit();
                    return true;

                case R.id.navigation_item2:
                    getSupportFragmentManager().beginTransaction()
                    .setCustomAnimations(R.anim.fade_in, R.anim.fade_out)
                    .replace(R.id.container, StartFood).commit();
                    return true;
            }
            return false;
        }
    } 

Изменить: Прочитайте Окончательное руководство по нижней навигации на Android

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...