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

Posted

技术标签:

【中文标题】如何在 Android 中单击 ImageView 时从一个片段移动到另一个片段?【英文标题】:How to move from one fragment to another fragment on click of an ImageView in Android? 【发布时间】:2014-06-06 09:20:34 【问题描述】:

我有一个 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;
    

【问题讨论】:

【参考方案1】:
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。

【讨论】:

片段片段=新任务();我收到错误cannot convert fragments to task。怎么办? tasks extends fragment...所以任务只是片段的子类,并确保您的导入语句 import android.support.v4.app.Fragment;导入 android.support.v4.app.FragmentManager;导入 android.support.v4.app.FragmentTransaction;如果仍然有错误,则发布您的日志消息 任务片段的布局 ID 为 r.id.task。我当前的片段有布局 id r.id.contact。那么我应该写什么来代替r.id.content_frame 好的..你现在在 MyContacts 片段中......你如何开始......?检查..你可能会通过替换视图从某个地方调用 mycontacts 片段...... .所以在这里你也必须提到同样的观点..希望这对你有帮助。 哦,我搜索了多长时间!谢谢!不过,起初,变量 tasks (?!) 的名称令人困惑。然后他随口说他叫他的碎片任务! =)【参考方案2】:

当你在一个活动中并且需要去下面的片段使用时

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

【讨论】:

【参考方案3】:
@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;

【讨论】:

【参考方案4】:

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


Fragment fragment = new yourfragment();
        FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container, fragment);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

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

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

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

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

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

【讨论】:

片段片段=新任务();我收到错误无法将片段转换为任务。该怎么办? —— 请检查导入,使用supportedFragment或Fragments 询问片段的布局 id 为 r.id.task。我当前的片段有布局 id r.id.contact。那么我应该写什么来代替 r.id.content_frame?【参考方案7】:

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

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

【讨论】:

【参考方案8】:
private boolean loadFragment(Fragment fragment) 
        if (fragment != null) 
            getSupportFragmentManager()
                    .beginTransaction()
                    .replace(R.id.fl_fragment_container, fragment)
                    .commit();
            return true;
        
        return false;
    

【讨论】:

【参考方案9】:

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

    val bpfragment = TwoFragment()
    activity?.supportFragmentManager?.beginTransaction()?.replace(R.id.fragment_container, bpfragment)?.commit()

【讨论】:

以上是关于如何在 Android 中单击 ImageView 时从一个片段移动到另一个片段?的主要内容,如果未能解决你的问题,请参考以下文章

Android当用户单击按钮时如何移动ImageView(对于游戏)

如何在 Android 上的 ImageView 上显示来自网站的图像?

在android中改变imageview的高度和宽度

Android imageview更改色调以模拟按钮单击

如何在特定的imageView上上传特定的图像点击来自android中的画廊和相机

如何在android中将图像从一个活动发送到另一个活动?