从MainActivity获取数据并在Fragment上处理它时遇到问题。
首先,有4个碎片。我正在使用TabLayout
和ViewPager
。每当从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会忽略它。