我猜它的东西很简单,也许是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。当我按下它时,它会正确地恢复列表视图。
问题是,如果我点击*的背景,它的行为就好像我会点击它背后的列表..并将有关该项目的片段带到前面。我可以在背景上无休止地点击以带来其他片段。我可以点击返回,返回列表..
为什么这个片段是透明的?我该如何解决这个问题?
答案 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”
对我有用。