点击片段会调用它背后的活动

时间:2012-02-08 09:47:23

标签: android android-listview android-fragments

我猜它的东西很简单,也许是listview或片段中的设置。 但是我现在几个小时都找不到它的解决方案。 所以.. 我有一个像这样的listView

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:isScrollContainer="true">

<ListView 
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#fffafa"
    />

</RelativeLayout>

当有人点击列表项时。我用这样的片段替换它

    FragmentManager manager = getSupportFragmentManager();
    FragmentTransaction ft = manager.beginTransaction();
    ft.replace(R.id.content, newFragment);

    ft.addToBackStack(null);
    ft.commit();

如果单击List上的项目,则整个列表将替换为由Button和几个文本字段组成的片段(*)。 Fragment使用有关该项的信息正确替换listView。当我按下它时,它会正确地恢复列表视图。

问题是,如果我点击*的背景,它的行为就好像我会点击它背后的列表..并将有关该项目的片段带到前面。我可以在背景上无休止地点击以带来其他片段。我可以点击返回,返回列表..

为什么这个片段是透明的?我该如何解决这个问题?

5 个答案:

答案 0 :(得分:14)

我通过在元素中添加android:clickable="true"解决了类似的问题,该元素表现得好像是#34;透明&#34;。使其可点击确保点击事件由它处理,而不是传递给下面的视图。

答案 1 :(得分:6)

我认为问题是replace方法不会取代ListView。它只替换容器中的其他片段。在这种特定情况下没有。因此,您实际上是在ListView之上添加您的片段,因为RelativeLayout允许视图在彼此之上。单击片段时,您没有完全处理它,因此它将进入基本视图ListView

一个简单,快速和肮脏的解决方案是检索ListView对象并自行将其从容器中删除,或将其设置为GONE的可见性。更好的解决方案是使用应显示预期结果的ListFragment

答案 2 :(得分:3)

将clickable属性设置为true,以便仅在前景片段上使用click事件。

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:clickable="true" />

答案 3 :(得分:3)

所以,我有完全相同的问题,我仍然不知道原因,但请确保将 android:clickable =“true”添加到第二个片段布局的roovView中

类似的东西:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:clickable="true"
android:orientation="vertical">
.....any content for your item (2nd fragment).....
</LinearLayout>

答案 4 :(得分:0)

在前景片段的FrameLayout标记中设置android:clickable =“ true”

对我有用。