Android studio подгрузить фрагмент и заполнить listview

206
19 февраля 2018, 02:37

Фрагмент:

public class ft_music_all extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    return inflater.inflate(R.layout.ft_all_music, null);
}

}

Activity

    private void start_navigator_left() { //Рисуем навигатор
    final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    DrawerBuilder builder = new DrawerBuilder()
            .withActivity(this)
            .withToolbar(toolbar)
            .withHeader(R.layout.drawer_header)
            .addDrawerItems(
                    new SecondaryDrawerItem().withIcon(R.drawable.mymusic).withName(R.string.my_music),
                    new SecondaryDrawerItem().withIcon(R.drawable.searchmusic).withName(R.string.search_music),
                    new SecondaryDrawerItem().withIcon(R.drawable.settings).withName(R.string.settings)
            )
            .withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
                @Override
                public boolean onItemClick(AdapterView<?> parent, View view, int position, long id, IDrawerItem drawerItem) {
                    if (drawerItem != null) {
                        if (drawerItem instanceof Nameable) {
                            toolbar.setTitle(((Nameable)
                                    drawerItem).getNameRes());
                        }
                        if(position == 0) {
                            ft_my_music fragment;
                            FragmentTransaction fTrans;
                            fragment = new ft_my_music();
                            fTrans = getFragmentManager().beginTransaction();
                            fTrans.replace(R.id.ft_panel, fragment);
                            fTrans.commit();
                        }
                        if(position == 1) {
                            ft_music_all fragment = new ft_music_all();
                            FragmentManager fragmentManager = getFragmentManager();
                            fragmentManager.beginTransaction()          
                                    .add(R.id.ft_panel, fragment)
                                    .addToBackStack("myStack")
                                    .commit();
                            create_fragments(); // ЗАПОЛНЯЕМ LISTVIEW ПОДГРУЖЕННОГО ФРАГМЕНТА
                        }
                    }
                    return false;
                }
            });
    builder.build();
}

Метод заполнения фрагмента:

public void create_fragments() {
    btnPlayImg = this.findViewById(R.id.btnPlayImg);
    btnLike = this.findViewById(R.id.btnLike);
    txtViewSingle = this.findViewById(R.id.txtViewSingle);
    txtViewTrack = this.findViewById(R.id.txtViewTrack);
    seekBar=(SeekBar) findViewById(R.id.musicSeekBar);
    listView = (ListView) findViewById(R.id.musicList);
    listView.setChoiceMode(listView.CHOICE_MODE_MULTIPLE);
    listView.setTextFilterEnabled(true);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            int checked_element = position - listView.getFirstVisiblePosition();
            visibleElem(index_track);
            musicDaemon.analize_track(position);
            adapterUpdate(checked_element, 1);
            index_track=position;
        }
    });
    seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean input) {
            if (input)
                musicDaemon.mediaPlayer.seekTo(progress);
        }
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
        }
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
        }
    });
    music_start();
}

Дело в том, что при вызове этого блока:

if(position == 1) {
                            ft_music_all fragment = new ft_music_all();
                            FragmentManager fragmentManager = getFragmentManager();
                            fragmentManager.beginTransaction()
                                    .add(R.id.ft_panel, fragment)
                                    .addToBackStack("myStack")
                                    .commit();
                            create_fragments(); // ЗАПОЛНЯЕМ LISTVIEW ПОДГРУЖЕННОГО ФРАГМЕНТА
                        }

Вызывает ошибку в create_fragments(). Если данный метод я вызываю из кнопки (onClick), все отрабатывает хорошо. Такое ощущение, что данная функция отрабатывает тогда, когда фрагмент еще не до конца загружен. Как лечить?

READ ALSO
Многопоточность в Spring MVC

Многопоточность в Spring MVC

Как создать параллельный поток в приложении реализованном на Spring MVCЧтобы при загрузке сервера создавался новый поток, который например бы каждую...

229
Table &ldquo;table_name&rdquo; cannot be resolved

Table “table_name” cannot be resolved

Создаю базу данных магазина, использую jpa hibernateЕсть 4 класса-сущности:

268
Взаимодействие floating action button и viewpager

Взаимодействие floating action button и viewpager

У меня есть TabLayout c 2 вкладками и ViewPagerВ каждую вкладку надо установить свои функции FloatingActionButton (в одном фрагменте она выполняет одну функцию,...

212
Почему не отображается содержимое h:outputLabel?

Почему не отображается содержимое h:outputLabel?

ЗдравствуйтеИзучаю интеграцию JSF & Spring

176