繁体   English   中英

ListView项目单击侦听器上的FragmentTransaction

[英]FragmentTransaction on a ListView item click listener

当我单击列表视图项时,我正在使用此代码执行FragmentTransaction

这是代码:

        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            android.support.v4.app.Fragment detail = new ProductsPurchasedFragment();
            FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.main_container, detail).addToBackStack("back").commit();
        }

        });

注意: main_container放置在MainActivity类的布局中,而我想放置片段。

这是我正在使用的XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">



<ListView
    android:id="@+id/listViewPurchases"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:scrollbarSize="3dp"
    android:layout_marginBottom="50dp"
    android:scrollbarStyle="outsideOverlay"
    android:descendantFocusability="blocksDescendants"
    android:scrollbars="vertical"
    android:scrollingCache="true"
    android:smoothScrollbar="true" />
</RelativeLayout>

我不知道是否有任何相关性,但这是ListView项目的CustomAdapter XML文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">


<TextView
    android:id="@+id/dispensaryAdressPurchases"
    android:layout_width="300sp"
    android:layout_height="wrap_content"
    android:layout_alignStart="@+id/dispensaryNamePurchases"
    android:layout_below="@+id/dispensaryNamePurchases"
    android:layout_marginTop="3dp"
    android:ems="10"
    android:textColor="@color/black" />

<TextView
    android:id="@+id/dispensaryNamePurchases"
    android:layout_width="300sp"
    android:textColor="@color/valet_green"
    android:layout_marginTop="15sp"
    android:layout_marginLeft="10sp"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:ems="10" />

<TextView
    android:id="@+id/cityAndStatePurchases"
    android:layout_width="300sp"
    android:layout_height="wrap_content"
    android:layout_alignStart="@+id/dispensaryAdressPurchases"
    android:layout_below="@+id/dispensaryAdressPurchases"
    android:layout_marginBottom="15dp"
    android:layout_marginTop="3dp"
    android:ems="10" />
<TextView
    android:id="@+id/dispensaryIDP"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignEnd="@+id/dispensaryNamePurchases"
    android:layout_marginTop="15dp"
    android:visibility="invisible"/>


</RelativeLayout>

我在这里遇到的问题是,当我单击ListView的一项时,它抛出:

java.lang.IllegalArgumentException:找不到片段ProductsPurchasedFragment {da5eb68#3 id = 0x7f0800ba}的ID 0x7f0800ba(com.example.dragosandrei.greenkinexdorian:id / main_container)的视图

列表视图放置在选项卡片段中,该标签也放置在片段中。 有人可以告诉我我在做什么错吗?

您需要具有一个名为main_container的ID的布局,逻辑才能工作。 例如,您可以在Activity的Layout中添加一个ID为main_containerFrameLayout

在XML的ListView下方添加以下内容:

<FrameLayout
   android:id="@+id/main_container"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_below="@id/listViewPurchases" >
</FrameLayout>

那应该在RelativeLayout里面,但是在ListView之后,如果您仍然发现一些困难,请在下面评论!

我解决了问题。 我必须获取parentFragment并从父级获取片段管理器。

Fragment ft = getParentFragment();
FragmentTransaction fragmentTransaction = ft.getFragmentManager().beginTransaction();   
fragmentTransaction.replace(R.id.main_container , new ProductsPurchasedFragment());
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM