使用 OnItemClickListener 列出视图片段到片段事务
Posted
技术标签:
【中文标题】使用 OnItemClickListener 列出视图片段到片段事务【英文标题】:List View Fragment to Fragment trasaction with OnItemClickListener 【发布时间】:2019-08-14 20:50:49 【问题描述】:我有两个片段。
public class ListNav extends Fragment
public class SwipeNav extends Fragment
我使用“ListNav”类制作了列表视图。当单击字符串数组的任何项目时,我想使用“setOnItemClickListener”将片段交易到 SwipeNav 片段。 使用以下时我得到结果。
@Override
public void onViewCreated(View view, Bundle savedInstanceState)
super.onViewCreated(view, savedInstanceState);
lv = (ListView) view.findViewById(R.id.my_listView);
inputS=(TextView) view.findViewById(R.id.inputSearch);
ArrayAdapter<CharSequence> aa = ArrayAdapter.createFromResource(getContext(), R.array.tab_titles, android.R.layout.simple_list_item_1);
lv.setAdapter(aa);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l)
inputS.setText((String) lv.getAdapter().getItem(i));
);
但我需要单击“ListNav”上的字符串数组中的项目,它将打开新片段“SwipeNav”,该片段通过滑动视图打开来自相同字符串数组的所有项目。我想将 ListNav 中的相同项目显示到SwipeNav 上的相同项目。 为此,我无法实施。我使用下面的方法但失败了。错误信息 : 不幸的是,应用停止了。
SwipeNav fragment = new SwipeNav();
FragmentTransaction transaction =
getFragmentManager().beginTransaction();
transaction.replace(R.id.nav_list, fragment);
transaction.addToBackStack(null);
transaction.commit();
SwipeNav.java
public void onViewCreated(View view, Bundle savedInstanceState)
super.onViewCreated(view, savedInstanceState);
myPagerAdapter = new
MyPagerAdapter(getChildFragmentManager(),getContext());
viewPager = (ViewPager) view.findViewById(R.id.pager);
viewPager.setAdapter(myPagerAdapter);
Logcat 错误:
Shutting down VM
W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xa4d09b20)
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.IllegalArgumentException: No view found for id 0x7f090067 (..:id/nav_list) for fragment SwipeNav529dd108 #2 id=0x7f090067
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1413)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1750)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1819)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2590)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2377)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2332)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2239)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:700)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
SwipeNav.java 也在导航菜单中。它使用滑动视图打开所有项目。 SwipeNav 上没有错误。
【问题讨论】:
根据异常,您的活动的 xml 没有 id 为nav_list
的布局,您正在尝试加载该 id 中的片段
@ronginat 两个 java 文件都在导航菜单中。 ListNav 将所有项目作为列表打开,SwipeNav 从字符串数组中打开所有项目而没有任何错误。
【参考方案1】:
R.id.nav_list
对应的view是否在activity中?如果是这样,您的片段无法找到活动中的视图。要么向活动抛出回调,然后从活动中替换片段,要么使用view.rootView.findViewById(R.id.nav_list)
获取视图并提供其 ID。
【讨论】:
以上是关于使用 OnItemClickListener 列出视图片段到片段事务的主要内容,如果未能解决你的问题,请参考以下文章
如何在 OnItemClickListener 中应用通知?
获取 Android Studio 中 onItemClickListener 中每一行的 id
如何在 ListView 中使用 onItemClickListener 获取其他列
如何使用 onItemClickListener 存储 ListView 中的可点击项目?