1

我确定这之前已经回答过了,但我需要简单地说明如何实现这一点。我已经看到了太多的例子,以至于我现在完全迷茫和困惑。

我的应用程序就是这样构建的

在此处输入图像描述

想法是用户通过 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);
    }
}
4

0 回答 0