Android 如何在片段中设置Listener to按钮

Android 如何在片段中设置Listener to按钮,android,android-fragments,Android,Android Fragments,我有一个零碎的按钮。我想点击这个按钮,用fragment2替换fragment1,但当我尝试运行它时,我的应用程序仍然关闭 这是我在fragment1中的代码 @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View rootView = inflater.in

我有一个零碎的按钮。我想点击这个按钮,用fragment2替换fragment1,但当我尝试运行它时,我的应用程序仍然关闭

这是我在fragment1中的代码

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

      View rootView = inflater.inflate(R.layout.layout_menu, container, false);

     // gallery = (Gallery) rootView.findViewById(android.R.id.list);
      //gallery.setAdapter(new ItemAdapter(generateData(), getActivity()));
      Button button = (Button) rootView.findViewById(R.id.imageButtonAll);
      button.setOnClickListener(new View.OnClickListener() {
          @Override
        public void onClick(View v) {
              HomeFragment homeFragment = new HomeFragment();
              FragmentTransaction transaction = getFragmentManager().beginTransaction();
              transaction.replace(R.id.frame_container, homeFragment);
              transaction.commit();

        }       

        });     

      return rootView;       

        }  

  } 

不能从另一个片段内部打开片段。 因此,您必须将代码从onClick移动到活动并在那里运行

在您的活动中(假设其主要活动):

然后,在片段onClick中添加以下内容:

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        ((MainActivity) getActivity()).openMyFragement();
    }

});

问题是,您试图替换的视图在正在膨胀的视图中不存在。您必须从FragmentActivity中切换这些片段,该活动具有包含您试图替换的布局的contentview

main活动:

class MainActivity extends FragmentActivity {
    public Fragment frag1;
    public Fragment frag2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...

        frag1 = new Frag1();
        frag2 = new Frag2();
        //assumption to switch to frag 1 immediately
        switchToFragment(R.id.frame_container, homeFragment);

        ...
    }

    /** Switch UI to the given fragment (example) */
    void switchToFragment(Fragment newFrag) {
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, newFrag)
            .commitAllowingStateLoss();
        currentFragment = newFrag;
    }
}
....

final Activity activity = getActivity();
button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            about.setTextColor(Color.WHITE);

            if(activity instanceof MainActivity) {
                ((MainActivity) activity).switchToFragment(((MainActivity) activity).frag1));
            }
        }
    });

...
片段:

class MainActivity extends FragmentActivity {
    public Fragment frag1;
    public Fragment frag2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...

        frag1 = new Frag1();
        frag2 = new Frag2();
        //assumption to switch to frag 1 immediately
        switchToFragment(R.id.frame_container, homeFragment);

        ...
    }

    /** Switch UI to the given fragment (example) */
    void switchToFragment(Fragment newFrag) {
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, newFrag)
            .commitAllowingStateLoss();
        currentFragment = newFrag;
    }
}
....

final Activity activity = getActivity();
button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            about.setTextColor(Color.WHITE);

            if(activity instanceof MainActivity) {
                ((MainActivity) activity).switchToFragment(((MainActivity) activity).frag1));
            }
        }
    });

...

它是否显示了一些异常?查看日志以查看是否出现异常。@siwarak很高兴听到这个消息。如果你能接受我的回答,那就太好了;)