从 MainActivity 获取数据并在 Fragment 上处理时遇到问题。
起初,有4个片段。我正在使用TabLayout
和ViewPager
。每当从 Tab 中选择一个片段时,它都会触发onPageSelected()
方法。在这里,我实例化事务,并通过setArguments()
. 在片段中,我在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 忽略它。