片段处于加载状态,从活动中调用时不会加载

时间:2017-10-07 20:49:38

标签: android android-fragments

我对Android很新,我正在学习使用片段。我创建了一个片段,当我选择BottomNavigation视图上的特定选项卡时,该片段显示Textview。我像这样打开片段:

public void switchToWorkoutFragment() {
        FragmentManager manager = getSupportFragmentManager();
        manager.beginTransaction().replace(R.id.content, new 
            ListFragment()).commit();
    }

然后在选择“锻炼”按钮时调用此功能,如下所示:

private BottomNavigationView.OnNavigationItemSelectedListener 
mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {

        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.navigation_home:
                    mTextMessage.setText("Stats Fragment");
                    return true;
                case R.id.navigation_dashboard:
                    mTextMessage.setText("Workout Fragment");
                    switchToWorkoutFragment();
                    return true;
                case R.id.navigation_notifications:
                    mTextMessage.setText("Goals Fragment");
                    return true;
            }
            return false;
        }

    };

当我按下Workout按钮时,片段只是不想加载。它无限期地与旋转图标一起放置,不加载任何东西。我不知道为什么会这样做,因为那里没有那么多东西可以加载(就像我说的那样,它只是一个文本视图)

2 个答案:

答案 0 :(得分:0)

您是否将侦听器设置为视图? 像:

(BottomNavigationView) nav = findViewById(R.id.bottom_navigation_panel);
nav.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);

答案 1 :(得分:0)

问题在于您在switchToWorkoutFragment方法中传递new ListFragment()。 ListFragment包含一个ListView来显示项目,这个ListView需要一个Adapter来提取要显示的数据。由于您在没有设置适配器并将数据传递到显示的情况下传递了一个全新的ListFragment,因此Fragment没有任何要显示的内容。所以你可以这样做:

ListFragment fragment = new ListFragment();
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1);
adapter.addAll(Arrays.asList(new String[]{"Item one", "Item two", "Item 3"}));
fragment.setListAdapter(adapter);

getSupportFragmentManager()
        .beginTransaction()
        .add(R.id.fragmentContainer, fragment)
        .commit();

请注意,设置适配器足以隐藏旋转图标并正确显示ListFragment(带或不带数据)