【问题标题】:Load item in second fragment when first list item loaded加载第一个列表项时在第二个片段中加载项
【发布时间】:2012-11-08 17:42:28
【问题描述】:

我正在尝试构建类似于Android Fragments tutorial 的东西:我在左侧有一个 ListView 片段,在右侧有一个可以显示项目的片段。

现在我尝试通过 SimpleCursorAdapter(我通过 LoaderManager 使用)加载列表中的第一项(或不久之后)——所有这些都使用 Android 支持库。

public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    mAdapter = new SimpleCursorAdapter(/* options */);
    setListAdapter(mAdapter);
}

public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    CursorLoader cl = new CursorLoader(getActivity());
    /* setProjection, etc */
    return cl;
}

public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    mAdapter.swapCursor(data);
}

public void onLoaderReset(Loader<Cursor> loader) {
    mAdapter.swapCursor(null);
}

我检查了各种示例实现,它们似乎都太简单了,或者根本没有在加载时填充右侧的片段,而是在单击时填充。

无论如何我都需要实现onLoadFinished,但这对我来说太晚了,因为我正在加载一个长列表。所以我按照onItemLoadedListener 的思路思考,我只会在第一次调用它时使用它。但似乎不存在这样的东西,所以我很困惑。

感谢您的指点!

【问题讨论】:

    标签: android android-listview android-fragments


    【解决方案1】:

    你反对什么太简单了?

     public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
         data.moveToFirst();
         Bundle b = new Bundle();
         // get info from that first item and put into the bundle
         ...
    
         ContentFrag f = new ContentFrag();
         f.setArguments(b);
         getSupportFragmentManager().beginTransaction().replace(R.id.contentLayout, f).commit();
    
         // instantiate and set your adapter
         ...
     }
    

    简单!就像任何其他片段事务一样。

    【讨论】:

    • 哇,真快,谢谢。当你发布这个问题时,我已经更新了这个问题,简而言之,这个列表很长,而且 onLoadFinished 调用很晚,所以我认为它不是我的解决方案。
    • 好的,我需要收回这个。实际上,即使列表很长,这也被称为很快。作品。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多