Im guessing its something really simple, maybe a setting in listview or fragment. But I couldnt find solution for it for couple of hours now. So.. I have a listView like this
<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>
when someone clicks on the list item. I replace it with a fragment like this
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.content, newFragment);
ft.addToBackStack(null);
ft.commit();
If I click on the item on the List, The whole list is replaced with a fragment(*) consisting of a Button and and couple of text fields. The Fragment replaces the listView properly with information about the item. When I press back it does properly bring the list view back.
The problem is that if i click on the background of the * it behaves as if I would click on the list that is behind it.. and brings fragment about that item to the front. I can click endlessly on background to bring other fragments. I can dig back to list by clicking back,back..
Why this fragment is transparent? how can i fix this?
I believe the issue is that the replace
method doesn't replace the ListView
. It only replaces other fragments that are within the container. In this specific case there are none. Thus, you're essentially adding your fragment on top of the ListView
because the RelativeLayout
allows views to be on top of one another. When you click on the fragment, you're not fully handling it, so it goes through to the base view which is the ListView
.
A simple, quick, and dirty solution would be to retrieve the ListView
object and either remove it from the container yourself or set it's visibility to GONE
. A better solution would be to use ListFragment which should show the expected results.