从MainActivity获取数据并在Fragment中处理它

时间:2018-04-17 23:17:03

标签: android android-fragments fragment android-volley fragment-lifecycle

从MainActivity获取数据并在Fragment上处理它时遇到问题。

首先,有4个碎片。我正在使用TabLayoutViewPager。每当从Tab中选择一个片段时,它就会触发onPageSelected()方法。在这里,我实例化事务并通过setArguments()的方式根据选定的片段发送字符串URL。在Fragment中,我在getArguments()的帮助下成功收到字符串URL,但是当我使用该URL从API检索数据时,fetchData()(using Volley)方法忽略它。

以下是onPageSelected()方法

@Override
            public void onPageSelected(int position) {
                switch (position) {
                    case 0:
                        getSupportFragmentManager().beginTransaction().replace(
                                R.id.linear_frame,
                                FragmentAllLanguages.newInstance(0, NetworkUtils.URL_ALL_NEWS))
                                .commit();
                        break;

碎片的onCreateView()

        if (getArguments() != null) {
        fetchData(getArguments().getString(ARGS_URL));
        Toast.makeText(getContext(), "URL is " + getArguments().getString(ARGS_URL), Toast.LENGTH_SHORT).show();
        Log.e(TAG, "IF IF IF" + getArguments().getInt(ARGS_ID));
    } else {
        fetchData(NetworkUtils.URL_ALL_NEWS);
        Toast.makeText(getContext(), "else part", Toast.LENGTH_SHORT).show();
        Log.e(TAG, "ELSE ELSE ELSE");
    }

最后,"有趣"选择片段时的日志文件

04-18 02:43:20.764 5610-5610/com.example.orkhan.nexeber E/Volley: ELSE ELSE ELSE
04-18 02:43:20.768 5610-5610/com.example.orkhan.nexeber E/RecyclerView: No adapter attached; skipping layout
04-18 02:43:20.770 5610-5683/com.example.orkhan.nexeber D/EGL_emulation: eglMakeCurrent: 0x9e105420: ver 2 0 (tinfo 0x9e103370)
04-18 02:43:20.794 5610-5610/com.example.orkhan.nexeber E/Volley: IF IF IF2
04-18 02:43:20.850 5610-5610/com.example.orkhan.nexeber E/RecyclerView: No adapter attached; skipping layout

我的问题是,为什么if语句被调用了两次虽然它在Tab中选择了一次?

我的版本可能是因为beginTransaction的延迟,我的意思是,它无法像oncreateView()方法的调用一样快地发送数据。这就是为什么首先执行 else 部分,然后执行 if 部分时,RecyclerView会忽略它。

0 个答案:

没有答案