Я разработал базовое приложение для Android в Android studio, которое содержит ViewPager с двумя фрагментами / страницами.Первая страница содержит несколько элементов, из которых только кнопка и ProgressBar имеют отношение к этой проблеме.
Когда приложение запускается с нуля (без ожидания), код действительно достигает точки, где скрывается ProgressBar,но это не идет дальше - код просто ломается в этой точке.Я могу нажимать кнопку «Heute» или другие так часто, как я хочу - индикатор ProgressBar будет появляться и исчезать, но код после его скрытия не будет выполнен, за исключением того, что я переключаюсь на вторую страницу один раз и переключаюсь обратно на главнуюстр.Как ни странно, после этого все работает нормально.
Примечание. Когда я закомментирую часть, где я скрываю ProgressBar, приложение застревает в notifyDataSetChanged () в CoverPlanAdapter.
I 'Я благодарен каждому возможному решению!Приветствия
Основная активность (инициализация ViewPager):
private SectionsPagerAdapter sectionsPagerAdapter;
private CoverPlanFragment coverPlanFragment;
private SettingsFragment settingsFragment;
private ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gtp);
CoverPlanFetcher.setContext(getApplicationContext());
// Create the adapter that will return a fragment for each of the sections
sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
viewPager = findViewById(R.id.pager);
viewPager.setAdapter(sectionsPagerAdapter);
ViewPager.OnPageChangeListener pageChangeListener = new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if (position == 0) {
coverPlanFragment.refreshCurrent();
}
}
};
viewPager.setOnPageChangeListener(pageChangeListener);
viewPager.post(() -> pageChangeListener.onPageSelected(0));
// Add Tabs for easier identifying
TabLayout tabLayout = findViewById(R.id.sliding_tabs);
tabLayout.setupWithViewPager(viewPager);
}
public class SectionsPagerAdapter extends FragmentPagerAdapter {
private final String[] tabTitles = {"Vertretungsplan", "Einstellungen"};
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Object fragment = super.instantiateItem(container, position);
if(position == 0) {
coverPlanFragment = (CoverPlanFragment) fragment;
} else if(position == 1) {
settingsFragment = (SettingsFragment) fragment;
}
return fragment;
}
@Override
public Fragment getItem(int position) {
if (position == 0) {
if (coverPlanFragment == null) {
coverPlanFragment = new CoverPlanFragment();
}
return coverPlanFragment;
} else if (position == 1) {
if (settingsFragment == null) {
settingsFragment = new SettingsFragment();
}
return settingsFragment;
}
return null;
}
@Override
public int getCount() {
return 2;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return tabTitles[position];
}
}
Первый фрагмент:
private ExpandedListView listVertretung;
private ProgressBar loading;
public CoverPlanFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_cover_plan, container, false);
listVertretung = view.findViewById(R.id.list_vertretung);
listVertretung.setAdapter(new CoverPlanAdapter(getContext(), new ArrayList<>()));
loading = view.findViewById(R.id.loading);
view.findViewById(R.id.today).setOnClickListener(v -> today());
return view;
}
public void today() {
loading.setVisibility(View.VISIBLE);
CoverPlanFetcher.getInstance().getTodayCoverPlan(plan -> {
update(plan);
});
}
public void refreshCurrent() {
loading.setVisibility(View.VISIBLE);
CoverPlanFetcher.getInstance().getCoverPlan(null, plan -> {
update(plan);
});
}
private void update(CoverPlanFetcher.CoverPlan plan) {
// code goes until here
loading.setVisibility(View.INVISIBLE);
// ProgressBar is hidden, but following function is never executed
((CoverPlanAdapter) listVertretung.getAdapter()).update(plan.getVertretung());
}
Второй фрагмент:
public SettingsFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_settings, container, false);
return view;
}
CoverPlanAdapter(Адаптер ListView):
private Context context;
private List<CoverPlanFetcher.CoverPlanRow> rows;
public CoverPlanAdapter(Context context, List<CoverPlanFetcher.CoverPlanRow> rows) {
this.context = context;
this.rows = rows;
}
@Override
public int getCount() {
return rows.size();
}
@Override
public CoverPlanFetcher.CoverPlanRow getItem(int position) {
return rows.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
CoverPlanRowViewHolder holder;
if (view == null) {
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(R.layout.cover_plan_row, null);
holder = new CoverPlanRowViewHolder(view);
view.setTag(holder);
} else {
holder = (CoverPlanRowViewHolder) view.getTag();
}
if (position % 2 == 0) {
view.setBackgroundColor(Color.parseColor("#e6e6ff"));
} else {
view.setBackgroundColor(Color.parseColor("#ffffff"));
}
CoverPlanFetcher.CoverPlanRow row = getItem(position);
holder.first.setText(row.getHour() + "\n" + row.getSubject() + "\n" + row.getGrade());
holder.second.setText(row.getNotice());
holder.third.setText(row.getTeacher() + "\n\n" + row.getRoom());
return view;
}
public void update(List<CoverPlanFetcher.CoverPlanRow> rows) {
this.rows.clear();
this.rows.addAll(rows);
// when hiding the ProgressBar is commented out, this doesnt even do anything -> the ListView shows no content
notifyDataSetChanged();
}
public class CoverPlanRowViewHolder {
private TextView first;
private TextView second;
private TextView third;
public CoverPlanRowViewHolder(View view) {
first = view.findViewById(R.id.row_first);
second = view.findViewById(R.id.row_second);
third = view.findViewById(R.id.row_third);
}
}