【发布时间】:2016-02-01 20:40:29
【问题描述】:
我查看了其他线程,它们都展示了如何在创建片段时执行此操作,而不是异步执行。
我有 3 个活动,每个活动都执行异步 okhttp3.HttpUrl 获取,以便从第三方 JSON API 接收数据。然后在完成后,它将用数据填充活动。
我已经将这 3 个活动转换为片段并将它们放入父活动中。但是,这意味着每次我加载新的父 Activity 时,它都会进行 3 次 okhttp3.HttpUrl 提取以填充 3 个片段。
所有三个获取都转到同一个 URL,所以我想改为将 okhttp3.HttpUrl 请求放在父活动中,一旦完成,将整个 JSON 包发送到片段。这是在创建片段之后...所以我不知道该怎么做...
有什么想法吗?
我的家长活动:
public class ChallongeEvent extends AppCompatActivity {
private TextView tab_text;
private String EVENT_ID, URL;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_challonge_event);
init();
}
private void init() {
tab_text = (TextView) findViewById(R.id.tab_text);
Intent intent = getIntent();
EVENT_ID = intent.getStringExtra("event_id");
if (Challonge.SUBDOMAIN.isEmpty()) {
URL = "https://api.challonge.com/v1/tournaments/" + EVENT_ID + ".json";
} else {
URL = "https://api.challonge.com/v1/tournaments/" + Challonge.SUBDOMAIN + "-" + EVENT_ID + ".json";
}
String titles[] = new String[] { getString(R.string.players), getString(R.string.matches) };
int numTabs = intent.getIntExtra("num_tabs", 1);
EventAdapter adapter = new EventAdapter(getSupportFragmentManager(), titles, numTabs);
ViewPager pager = (ViewPager) findViewById(R.id.pager);
pager.setAdapter(adapter);
pager.setCurrentItem(intent.getIntExtra("num_tabs", 1) - 1);
SlidingTabLayout sliding_tabs = (SlidingTabLayout) findViewById(R.id.sliding_tabs);
sliding_tabs.setDistributeEvenly(true);
sliding_tabs.setViewPager(pager);
}
private void populate() {
AsyncGet fetch = new AsyncGet(new AsyncResponse() {
@Override
public void processFinish(String output) {
}
});
HttpUrl.Builder urlBuilder = HttpUrl.parse(URL).newBuilder();
urlBuilder.addQueryParameter("api_key", Challonge.API_KEY);
urlBuilder.addQueryParameter("include_participants", "1");
urlBuilder.addQueryParameter("include_matches", "1");
fetch.execute(urlBuilder.build().toString());
}
public void setTabText(String text) {
tab_text.setText(text);
}
}
class EventAdapter extends FragmentPagerAdapter {
private final String[] titles;
private final int numTabs;
public EventAdapter(FragmentManager fm, String mTitles[], int mNumTabs) {
super(fm);
this.titles = mTitles;
this.numTabs = mNumTabs;
}
@Override
public Fragment getItem(int position) {
switch (position)
{
case 1:
return new ChallongeMatches();
default:
return new ChallongePlayers();
}
}
@Override
public String getPageTitle(int position) {
return titles[position];
}
@Override
public int getCount() {
return numTabs;
}
}
【问题讨论】:
-
我认为,EventBus 可以在这里为您提供帮助(在 Activity 和 Fragments 之间进行通信,或者例如在不同的 Fragment 之间进行通信) - 看看:stackoverflow.com/questions/34199714/…