我确定这之前已经回答过了,但我需要简单地说明如何实现这一点。我已经看到了太多的例子,以至于我现在完全迷茫和困惑。
我的应用程序就是这样构建的
想法是用户通过 facebook 登录(作品),然后在 frag #1 中是一个包含最近朋友活动的列表,frag #2 是一种用户个人资料,在 frag #3 中是一个朋友列表。
我在片段活动中使用 facebook 登录,我将用户保存到数据库中,效果很好。
现在我不知道填充片段内容的最佳做法是什么。片段#2是我的主要片段,我可以很好地填充它的内容,但是当我切换到片段#3时,列表是空的 - 片段#3 oncreateview方法没有被调用,但是当我再次切换回片段#1时回到片段#3 oncreateview 方法被调用并更新视图。
如果有人能花一些时间解释一下这种情况下的最佳做法,我将不胜感激。
我的问题是:
我应该在哪里运行从数据库中检索数据的方法?片段活动还是每个片段自己?
最重要的问题是如何更新 viewpager 中的片段?
此外,我的几个查询似乎被跳过并返回 null,尽管它应该等待并返回一些值。
代码看起来像这样
responsedJson = new SynchronousHttpRequestTask().execute(httRequest).get();
编辑:
我正在使用带有片段寻呼机适配器的 viewpager。我在 Fragment 活动的 OnCreate 方法中配置它们
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager_layout);
//this method will be running on UI thread
_fragments.add(FRAGMENT_ONE, new NewsFeed());
_fragments.add(FRAGMENT_TWO, new MainActivity());
_fragments.add(FRAGMENT_THREE, new FriendListActivity());
// Setup the fragments, defining the number of fragments, the screens and titles.
_fragmentPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public int getCount() {
return FRAGMENTS;
}
@Override
public Fragment getItem(final int position) {
return _fragments.get(position);
}
@Override
public CharSequence getPageTitle(final int position) {
switch (position) {
case FRAGMENT_ONE:
return "News feed";
case FRAGMENT_TWO:
return "Profile";
case FRAGMENT_THREE:
return "Friend list";
default:
return null;
}
}
};
_viewPager = (ViewPager) findViewById(R.id.viewpager);
_viewPager.setAdapter(_fragmentPagerAdapter);
_viewPager.setOffscreenPageLimit(0);
_viewPager.setCurrentItem(1);
//facebook login
FragmentManager fm = getSupportFragmentManager();
loginfragment = fm.findFragmentById(R.id.splashFragment);
FragmentTransaction transaction = fm.beginTransaction();
transaction.hide(loginfragment);
transaction.commit();
//end facebook login
}
SynchronousHttpRequestTask 代码
class SynchronousHttpRequestTask extends AsyncTask<HttpPost, JSONObject, JSONObject> {
@Override
protected JSONObject doInBackground(HttpPost... request) {
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response;
String responseString = null;
try {
response = httpclient.execute(request[0]);
StatusLine statusLine = response.getStatusLine();
if (statusLine.getStatusCode() == HttpStatus.SC_OK) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
response.getEntity().writeTo(out);
out.close();
responseString = out.toString();
} else {
//Closes the connection.
response.getEntity().getContent().close();
throw new IOException(statusLine.getReasonPhrase());
}
} catch (ClientProtocolException e) {
//TODO
} catch (IOException e) {
//TODO
}
return StaticRestClient.StringToJson(responseString);
}
}