从ListView的ItemClick侦听器加载片段

时间:2013-09-03 11:41:40

标签: android-listview android-fragments android-fragmentactivity android-listfragment

我有一个片段活动,其中包含listview。单击ListView的项目我想加载片段并关闭片段活动。

我尝试按以下方式实施,但在我尝试加载FrameLayout时收到Fragment id的错误。

logcat的:

 09-03 16:49:57.321: E/AndroidRuntime(1740): FATAL EXCEPTION: main
 09-03 16:49:57.321: E/AndroidRuntime(1740): java.lang.IllegalArgumentException: No view found for id 0x7f0a0045 (com.zeal.peekaboo:id/fragmentswitcherframe) for fragment OtherProfileFragment{4a31cb00 #0 id=0x7f0a0045}
 09-03 16:49:57.321: E/AndroidRuntime(1740):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:919)
 09-03 16:49:57.321: E/AndroidRuntime(1740):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
 09-03 16:49:57.321: E/AndroidRuntime(1740):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
 09-03 16:49:57.321: E/AndroidRuntime(1740):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
 09-03 16:49:57.321: E/AndroidRuntime(1740):    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
 09-03 16:49:57.321: E/AndroidRuntime(1740):    at android.os.Handler.handleCallback(Handler.java:587)
 09-03 16:49:57.321: E/AndroidRuntime(1740):    at android.os.Handler.dispatchMessage(Handler.java:92)
 09-03 16:49:57.321: E/AndroidRuntime(1740):    at android.os.Looper.loop(Looper.java:123)
 09-03 16:49:57.321: E/AndroidRuntime(1740):    at android.app.ActivityThread.main(ActivityThread.java:4627)
 09-03 16:49:57.321: E/AndroidRuntime(1740):    at java.lang.reflect.Method.invokeNative(Native Method)
 09-03 16:49:57.321: E/AndroidRuntime(1740):    at java.lang.reflect.Method.invoke(Method.java:521)
 09-03 16:49:57.321: E/AndroidRuntime(1740):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
 09-03 16:49:57.321: E/AndroidRuntime(1740):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
 09-03 16:49:57.321: E/AndroidRuntime(1740):    at dalvik.system.NativeStart.main(Native Method)

Listview ItemClick

   m_lvList.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adptr, View view, int pos,
                long id) {
            m_slistItemId = String.valueOf(m_lookArryList.get(pos)
                    .getM_userId());
            FragmentManager fm = getSupportFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            Fragment llf = new OtherProfileFragment();
            ft.replace(R.id.fragmentswitcherframe, llf);
            ft.commit();
                            finish();
        }
    });

请指导我这个。我无法理解出了什么问题?

任何帮助将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:0)

“我无法理解出现了什么问题?”

如果我理解这是正确的,那么你在FragmentActivity的布局中加载一个Fragment并在commit()之后立即关闭这个Activity,用于finish()。

我不知道你想要实现什么,但你永远不会看到片段。当Activity被销毁时它将被销毁,这是因为finish()调用而发生的。此行为是片段lifecycle的一部分。片段不能单独存在,只能将Activity作为宿主存在。

您收到该错误,因为片段事务的commit()调用是异步的。表示通过finish()关闭Activity和布局,但事务的commit()仍会尝试将Fragment加载到布局中。

编辑:

如果你想完成()拥有ListView的Activity,则通过Intent将结果传递给另一个Activity。在此活动中,使用所需的片段构建您的视图并将结果传递给它。

也许您想看看Master Detail Flow Pattern,这正是针对该用例的。教程使用Eclipse的标准模板。您可以从中获取想法并进行修改。