错误选项卡中的 progressDialog

progressDialog in wrong tab

我的应用程序中有 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) {

            }
        });
    }

进度对话框是独立的window。它将显示直到被丢弃。如果创建它的上下文无效,它会抛出泄漏的异常window。在片段的 onPause 中,检查进度对话框的可空性并关闭它。如果你想在 onResume 中再次显示 window,你还可以检查任务是否仍然是 运行,前提是用户导航回此片段。 在任何情况下,如果您希望在加载视图时仅在特定片段中显示进度,您可能需要考虑改用 ProgressBar 并相应地设置其可见性。

第一个:

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);
}

以上代码希望大家参考。

它基本上是 android 寻呼机工作流程。它总是在您滑动时立即创建一个相邻的页面视图。你可以有记录器和检查。如果我没有弄错你的片段寻呼机,你会在片段的 onResume callback 开始你的进度条。

你为什么不使用片段的这种覆盖方法它只加载一次数据,并且在每个片段打开时加载数据。

 @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;
        }
    }