【发布时间】:2012-02-20 21:29:12
【问题描述】:
我第一次使用 Fragments 并遇到了奇怪的行为。我有一个片段覆盖整个视图的活动。它包含一个 ListView。当我点击 ListView 中的某个项目时,我想显示一个包含有关该项目的信息的详细信息片段。
这就是我展示新片段视图的方式:
FragmentManager fragmentManager = this.getActivity().getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
DetailsFragment fragment = new DetailsFragment();
transaction.add(R.id.viewRoot, fragment).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack("Details").commit();
R.id.viewRoot是第一个Fragment的布局xml中根布局的id,所以新的Fragment会填满整个屏幕。
我的问题:当新片段可见并覆盖整个屏幕时,任何落在背景上的点击或点击(即未点击新片段上的按钮或文本字段)似乎正在穿过视图并落在第一个片段。因此,我点击一个 ListView 项目,这会导致 DetailsFragment 添加到屏幕上。然后,当我点击 DetailsFragment 的背景时,该点击落下并落在 ListView 上,导致为我碰巧在幕后击中的任何项目添加另一个 DetailsFragment。
我是否错误地添加了我的新片段?为什么我的点击/点击失败了?
为 caiuspb 编辑:
public class BaseFragment extends Fragment {
public void pushNewFragment(Fragment fragment, String description) {
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.remove(this);
transaction.add(R.id.viewRoot, fragment).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack(description).commit();
}
}
我所有的片段都扩展了我的 BaseFragment 类。
【问题讨论】:
-
你试过transaction.replace(R.id.viewRoot, fragment)吗?
-
我以前没有,但我只是尝试过,但它的行为方式相同。
-
发现同样的问题 -> 似乎可以通过这个简单的解决方法来解决:在片段中的所有内容后面添加一个透明按钮,以捕捉每个会通过的点击