切换片段无法正常工作

时间:2014-07-23 21:44:44

标签: android android-fragments

我正在尝试使用ontouchlistener设置在整个屏幕上切换片段。我已经做了很多关于如何切换片段UI的谷歌搜索,这似乎是一般的答案;但是,当我使用这个方法时它除了在我当前的UI下面添加一个我想要的片段的透明版本之外什么都不做,然后由于某种原因当我点击那个片段时它会把我带出当前的活动并且去我上次的活动很奇怪,因为我从未添加过Intent来切换活动。

public class suggestedfriends extends Fragment{

    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.suggestedfriends,container, false);
        view.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                Fragment newFragment = new profile();
                FragmentTransaction transaction = getFragmentManager().beginTransaction();

                transaction.replace(R.id.mainfragment, newFragment);

                transaction.commit();
                return true;
            }
        });

        return view;
      } 
 }

 public class profile extends Fragment {

    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.profile_fragment,container, false);

        view.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Fragment newFragment = new search();
                FragmentTransaction transaction = getFragmentManager().beginTransaction();

                transaction.replace(R.id.mainfragment, newFragment);


                transaction.commit();
                return true;
            }
        });

        return view;
      }
}

所以我试图从第一个建议的朋友片段切换到第二个个人资料片段

3 个答案:

答案 0 :(得分:0)

如果让活动管理片段事务而不是在片段内部关心它,那就更好了

答案 1 :(得分:0)

尝试使用getChildFragmentManager()代替getFragmentManager()

子片段管理器在片段

中使用

答案 2 :(得分:0)

我相信你需要使用' android.R.id.content'而不是你特定的R.id.mainfragment'。你特意说你想从' R.id.mainfragment"切换。到新的片段,这不是真的。

' android.R.id.content'是一个通配符,在标准的Android SDK中实现,它始终有效(并且应该始终在这些情况下使用)。

你也可以进行内联的FragmentTransaction,它提供了更好的代码结构。

所以你的代码就像这样:

public class suggestedfriends extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.suggestedfriends, container, false);
    view.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            Fragment newFragment = new profile();
            getFragmentManager().beginTransaction().replace(android.R.id.content, newFragment).commit();
            return true;
        }
    });

    return view;
    }
}