У меня в приложении 4 вкладки. Один из них - для парсинга json с диалогом прогресса. Но я вижу диалог прогресса на другой вкладке. введите описание изображения здесь

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_parsing, container, false);
    lv = (ListView)view.findViewById(R.id.list);
    progressDialog = ProgressDialog.show(lv.getContext(), null, getResources().getString(R.string.connecting), true, true);
    MyTask myTask = new MyTask(FragmentParsing.this);
    myTask.execute(url);

    return view;
}

    @Override
public void onTaskComplete(ArrayList<String> array) {
    if(array != null) {
        //adapter.clear();
        arrayList.addAll(array);
        adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, arrayList);
        lv.setAdapter(adapter);
        adapter.notifyDataSetChanged();
    }
    else
        Toast.makeText(getView().getContext(), getResources().getString(R.string.fuck), Toast.LENGTH_SHORT).show();
    if (progressDialog != null && progressDialog.isShowing()) {
        progressDialog.dismiss();
    }
}

И я хочу видеть значки слева от текста. Не выше.

Код из MainActivity

private void setUI(){
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        if (toolbar != null){
            toolbar.setTitleTextColor(getResources().getColor(R.color.white));
            setSupportActionBar(toolbar);
        }
        TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
        tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_list_white_18dp).setText(R.string.listtab));
        tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_camera_alt_white_18dp).setText(R.string.scalingtab));
        tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_web_asset_white_18dp).setText(R.string.parsingtab));
        tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_my_location_white_18dp).setText(R.string.maptab));

        final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        TabAdapter tabAdapter = new TabAdapter(fragmentManager, 4);
        viewPager.setAdapter(tabAdapter);
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
    }
1
Evgeny GooDi 10 Май 2016 в 15:13

4 ответа

Лучший ответ

Это в основном рабочий процесс Android-пейджера. Он всегда создает одно соседнее представление страницы, как только вы проводите пальцем по экрану. Можешь завести регистратор и проверить. Если я не ошибаюсь, ваш пейджер фрагментов, вы запускаете индикатор выполнения на onResume callback фрагмента.

1
Sush 10 Май 2016 в 14:30

Первый:

public class MyApp extends Application { 
      public Boolean isLoaded = false; 
      public Boolean getIsLoaded(){  
           return isLoaded; 
      } 

     public void setIsLoaded(Boolean isLoaded){ 
       this.isLoaded = isLoaded;
     } 
}

И на стороне фрагмента вы можете выполнить это:

Boolean status;
status = ((MyApp) getActivity().getApplication()).getIsLoaded();
if(!status){
 //show your dialog
 //get your data
 ((MyApp) getActivity().getApplication()).setIsLoaded(true);
}

Надеюсь, вы можете воспользоваться ссылкой из приведенного выше кода.

1
Riten 10 Май 2016 в 12:35

Диалог выполнения - это независимое окно. Он будет отображаться до тех пор, пока не будет удален. Если контекст, который его создал, обнулен, он выдаст исключение просочившегося окна. В onPause вашего фрагмента проверьте, нет ли возможности обнулить диалоговое окно прогресса и закройте его. Вы также можете проверить, выполняется ли задача по-прежнему, если хотите снова отобразить окно в onResume при условии, что пользователь вернулся к этому фрагменту. В любом случае, если вы хотите, чтобы прогресс отображался только в определенном фрагменте при загрузке представлений, вы можете рассмотреть возможность использования ProgressBar вместо этого и соответствующим образом установить его видимость.

0
daxgirl 10 Май 2016 в 12:22

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

 @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {} 

Так как

 @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser && !isApiCalled) {
          //call the api and load data
            isApiCalled = true;
        }
    }
0
Pramod mishra 19 Май 2016 в 09:38