繁体   English   中英

如何在 Android 中单击 ImageView 时从一个片段移动到另一个片段?

[英]How to move from one fragment to another fragment on click of an ImageView in Android?

我有一个 ImageView。 我想通过单击 Imageview 从一个片段移动到另一个片段,就像我们可以使用从一个活动移动到另一个活动一样

Intent i=new Intent(MainActivity.this,SecondActivity.class);
startActivity(i);

我怎样才能做到这一点? 谁能一步步向我解释?

我的代码如下:

我的联系人.class

public class mycontacts extends Fragment {
    public mycontacts() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        final View v = super.getView(position, convertView, parent);
        ImageView purple=(ImageView)v.findViewById(R.id.imageView1);
        purple.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
            // TODO Auto-generated method stub
            //how to go to tasks fragment from here???
            }
        });
        return view;

    } 
}

任务.class

public class tasks extends Fragment {
    public tasks() { 
    }

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

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

        return view;
    }
}
purple.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        Fragment fragment = new tasks();
        FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.content_frame, fragment);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();
    }
});

你写了上面的代码......我们用我们的片段替换 R.id.content_frame。

将此代码添加到您要单击并加载Fragment的位置。


Fragment fragment = new yourfragment();
        FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container, fragment);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_profile, container, false);
    notification = (ImageView)v.findViewById(R.id.notification);

    notification.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            FragmentTransaction fr = getFragmentManager().beginTransaction();
            fr.replace(R.id.container,new NotificationFragment());
            fr.commit();
        }
    });

    return v;
}

当您在活动中并需要转到下面的片段时

getFragmentManager().beginTransaction().replace(R.id.*TO_BE_REPLACED_LAYOUT_ID*, new tasks()).commit();

但是当你在一个片段内并且需要去一个片段时,只需添加一个getActivity(). 之前,所以它会变成

getActivity().getFragmentManager().beginTransaction().replace(R.id.*TO_BE_REPLACED_LAYOUT_ID*, new tasks()).commit();

就如此容易。

*TO_BE_REPLACED_LAYOUT_ID*可以是活动的整个页面或其中的一部分,只需确保将 id 放入要替换的布局中。 通常将可替换布局放在FrameLayout中。

您可以使用 FragmentManager 事务移动到另一个片段。 片段不能称为活动,。 碎片存在就存在活动。

您可以通过编写以下代码来调用另一个片段:

FragmentTransaction t = this.getFragmentManager().beginTransaction();
Fragment mFrag = new MyFragment();
t.replace(R.id.content_frame, mFrag);
t.commit();

这里的“R.id.content_frame”是要替换片段的布局的id。

您还可以添加其他片段以防替换。

在你的 onClickListener.onClick 里面,放

getFragmentManager().beginTransaction().replace(R.id.container, new tasks()).commit();

换句话说,在你的 mycontacts.class

public class mycontacts extends Fragment {

    public mycontacts() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        final View v = super.getView(position, convertView, parent);
        ImageView purple = (ImageView) v.findViewById(R.id.imageView1);
        purple.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                getFragmentManager()
                        .beginTransaction()
                        .replace(R.id.container, new tasks())
                        .commit();
            }
        });
        return view;

    }
}

现在,请记住R.id.container是调用片段的活动的容器(FrameLayout 或其他布局)

如果您正在寻找上述代码的Kotlin 版本,您可以通过这种方式进行操作,然后在 onClickListener 或任何您想要的地方调用 replaceFragment(RequiredFragment())

private fun replaceFragment(fragment: Fragment) {
val transaction = activity!!.supportFragmentManager.beginTransaction()
transaction.replace(R.id.frame, fragment)
transaction.commit()
}
private boolean loadFragment(Fragment fragment) {
        if (fragment != null) {
            getSupportFragmentManager()
                    .beginTransaction()
                    .replace(R.id.fl_fragment_container, fragment)
                    .commit();
            return true;
        }
        return false;
    }

在 kotlin 中,放入当前正在运行的片段 button.setOnClickListener

    val bpfragment = TwoFragment()
    activity?.supportFragmentManager?.beginTransaction()?.replace(R.id.fragment_container, bpfragment)?.commit()
            val fragment = YourFragment3()
            val fm : FragmentManager= requireActivity().supportFragmentManager
            val ft: FragmentTransaction = fm.beginTransaction()
            ft.replace(R.id.container, fragment)
            ft.commit()
            (activity as MainActivity).binding.viewPager.setCurrentItem(2)

我们可以用这个——

purple.setOnClickListener(view1 -> {
        Fragment fragment = new task();
        FragmentManager manager = getFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.replace(R.id.frame, fragment);
        transaction.addToBackStack(null);
        transaction.commit();
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM