【问题标题】:ProgressDialog shows before 2nd TabBar fragment is openedProgressDialog 在打开第二个 TabBar 片段之前显示
【发布时间】:2016-02-06 23:53:43
【问题描述】:

我的主要活动中有 3 个标签。在第二个选项卡中,我有一个包含列表的片段,我正在使用 Retrofit 从我的服务器获取数据并将其显示在列表中。

在我的第二个片段中:

  @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    final View view = inflater.inflate(R.layout.fragment_recents, container, false);
    mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);

    return view;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    mRecyclerView.setHasFixedSize(true);


    mLayoutManager = new LinearLayoutManager(getActivity());
    mRecyclerView.setLayoutManager(mLayoutManager);
    mRecyclerView.setItemAnimator(new DefaultItemAnimator());
    getBooks();

}

private void getBooks(){

    final ProgressDialog loading = ProgressDialog.show(getContext(), "Fetching Data", "Please wait...", false, false);

   /* Retrofit code: */

    //Creating a rest adapter
    RestAdapter adapter = new RestAdapter.Builder()
            .setEndpoint(ROOT_URL)
            .build();

    //Creating an object of our api interface
    MyAPI api = adapter.create(MyAPI.class);

    //Defining the method
            api.getBooks(new Callback<List<MyPojo>>() {
                @Override
                public void success(List<MyPojo> list, Response response) {
                    //Dismissing the loading progressbar
                    loading.dismiss();

                    //Storing the data in our list
                    pojos = list;
                    mAdapter = new MyAdapter(getContext(), pojos);
                    mRecyclerView.setAdapter(mAdapter);

                }

                @Override
                public void failure(RetrofitError error) {
                    //you can handle the errors here
                    loading.dismiss();

                    Log.v("Error: ", "" + error);
                }
            });
}

我的问题是,在第一个选项卡中启动应用程序后会立即显示进度对话框。我希望它仅在打开第二个选项卡时获取数据。

【问题讨论】:

    标签: java android android-fragments tabs


    【解决方案1】:

    根据developer guide for fragments,片段的生命周期(参见链接中的图2)仅在onResume() 和onPause() android 回调之间处于活动状态(即显示并且用户可以与之交互)。

    如果您希望仅在显示片段时发生某些事情,请将用于显示它的代码放在 onResume() 回调中。您可以根据需要在其他回调中预取或进行其他设置。

    【讨论】:

    • 我试图在 onResume() 中显示 ProgressDialog,但它仍然显示在第一个选项卡中。
    • 即使没有显示第二个选项卡,片段onResume() 方法是否仍在运行?也许在方法或断点中放置一条 DEBUG 日志语句,看看它是否正在执行,即使片段不可见。我想我不会期望它,因为它不可见,直到显示第二个选项卡。如果是这种情况,则包装代码以在检查哪个选项卡可见的条件中显示片段。
    • 我试图在 onResume 中添加一个调试日志,它在打开第一个选项卡时确实执行了.. 仍然是同样的问题.. 一段时间后出现了日志,不知道为什么?
    • 在问题中发布您的代码。如果显而易见的答案不起作用,查看代码有助于缩短无休止的讨论。
    • 我已经在问题中添加了代码,请检查一下..谢谢
    【解决方案2】:

    把网络代码放在你的第二个Fragment的onResume()中

    @Override
      public void onResume() {
         super.onResume();
         final ProgressDialog loading = ProgressDialog.show(getContext(), "Fetching Data", "Please wait...", false, false);
    
         (and the rest is the Retrofit code)
    
      }
    

    【讨论】:

    • 我试过了,但我的应用启动后仍然会看到进度对话框
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2013-09-14
    相关资源
    最近更新 更多