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

时间:2014-04-22 06:36:44

标签: android android-fragments fragment

我有一个ImageView。我希望在点击Imageview时从一个片段移动到另一个片段,就像我们可以使用

从一个活动移动到另一个活动一样
Intent i=new Intent(MainActivity.this,SecondActivity.class);
startActivity(i);

我该怎么做?任何人都可以一步一步向我解释吗?

我的代码如下:

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
            //how to go to tasks fragment from here???
            }
        });
        return view;

    } 
}

tasks.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;
    }
}

7 个答案:

答案 0 :(得分:52)

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。 希望这有助于你

答案 1 :(得分:1)

您可以使用FragmentManager事务移动到另一个片段。片段不能像活动一样被调用。碎片存在于活动的存在之中。

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

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

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

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

答案 2 :(得分:1)

在你的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或其他布局)

答案 3 :(得分:1)

当您处于活动中并且需要转到以下片段时使用

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中。

答案 4 :(得分:1)

@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;
}

答案 5 :(得分:0)

将此代码添加到要单击并加载 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();

答案 6 :(得分:0)

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

private fun replaceFragment(fragment: Fragment) {
val transaction = activity!!.supportFragmentManager.beginTransaction()
transaction.replace(R.id.frame, fragment)
transaction.commit()
}