【问题标题】:How to move from one fragment to another fragment on click of an ImageView in Android?如何在 Android 中单击 ImageView 时从一个片段移动到另一个片段?
【发布时间】: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;
    }
}

【问题讨论】:

    标签: android android-fragments fragment


    【解决方案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()
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-05-17
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多