Android 将碎片1切换到碎片2

Android 将碎片1切换到碎片2,android,android-fragments,Android,Android Fragments,嗨,伙计们,我有一个带纽扣的碎片。我想在点击按钮时打开fragment2。 最好的解决方案是什么? 你能举个例子吗? 在XML片段1中: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:lay

嗨,伙计们,我有一个带纽扣的碎片。我想在点击按钮时打开fragment2。 最好的解决方案是什么? 你能举个例子吗? 在XML片段1中:

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/background"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="116dp"
        android:background="#0000"
        android:drawableTop="@drawable/autobus"
        android:onClick="OPENFRAGMENT"
        android:text="ooo" />
public class Fragment1 extends Fragment {

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

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

    return info;
}

public void OPENFRAGMENT(View view) 
{

}
在片段2中:

public class Fragment2 extends Fragment{

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

         View frag = inflater.inflate(R.layout.frag2, container, false);
         return frag;
 }
}
主要活动:

 public class MainActivity extends SherlockFragmentActivity  {


    ViewPager Tab;
    TabPagerAdapter TabAdapter;
    ActionBar actionBar;
    public boolean StatusConnection = false;
    public int thread = 0;


    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 


        TabAdapter = new TabPagerAdapter(getSupportFragmentManager()); 
        Tab = (ViewPager)findViewById(R.id.pager); 
        Tab.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {

                    @Override
                    public void onPageSelected(int position) {
                        actionBar.setSelectedNavigationItem(
                                position);
                        Tab.setCurrentItem(position);
                    }

                });
        Tab.setAdapter(TabAdapter); 

        actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        ActionBar.TabListener tabListener = new ActionBar.TabListener(){

            @Override
            public void onTabReselected(ActionBar.Tab arg0,FragmentTransaction arg1) {
                // TODO Auto-generated method stub

            }
            @Override
            public void onTabSelected(ActionBar.Tab arg0,FragmentTransaction arg1) {
                // TODO Auto-generated method stub
                Tab.setCurrentItem(arg0.getPosition());
            }
            @Override
            public void onTabUnselected(ActionBar.Tab arg0,FragmentTransaction arg1) {
                // TODO Auto-generated method stub

            }
        }; 

        actionBar.addTab(actionBar.newTab().setText("A").setTabListener(tabListener));
        actionBar.addTab(actionBar.newTab().setText("B").setTabListener(tabListener));
        actionBar.addTab(actionBar.newTab().setText("C").setTabListener(tabListener));

 @Override
    public Fragment getItem(int i) {
        switch (i) {
            case 0:
                return new Info();
            case 1:
                return new B(); 
            case 2:
                return  new  C();
activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/pager"
  android:layout_width="match_parent"
  android:layout_height="match_parent" />


提前谢谢你

首先,您必须使用以下代码从第一个片段上的按钮获取视图:

btnChFrag = info.findViewById(R.id.button1);
(信息是片段布局的视图)

然后您需要在该按钮上设置onclicklistener

btnChFrag.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        Fragment2 newFragment = new Fragment2();
        FragmentTransaction ft = getFragmentManager().beginTransaction(); 
        ft.replace(R.id.container, newFragment); 
        ft.commit();
}
将R.id.container与MainActivity视图中的容器一起更改

因此,碎片1上的代码将是:

public class Fragment1 extends Fragment {

private Button btnChFrag 

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

    View info = inflater.inflate(R.layout.info, container, false);
    btnChFrag = info.findViewById(R.id.button1);
    //set button onclicklistener here

    return info;
}
-----编辑------

对不起,我完全忘了你想用巴顿,我的错

这是片段1的代码

public class Fragment1 extends Fragment {

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

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


    Button btn1 = (Button)rootView.findViewById(R.id.button1);

    btn1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            ((MainActivity)Fragment1.this.getActivity()).Tab.setCurrentItem(2);
        }
    });
    return info;
}

尝试了一下,效果很好:)

您好,我在第1篇文章中添加了MainActivity,但是我在container-ft.replace(R.id.container,newFragment)中遇到了一个错误;将R.id.container与MainActivity视图中的容器一起更改。什么事@如果使用片段,默认情况下会运行一个活动(调用片段1的活动),并且它在xml中始终有一个容器,该容器将替换为要更改的片段。或者你可以在你的问题上添加你的活动代码和xml,也许我可以帮助你进一步了解你在主要活动中使用了什么代码来将片段1添加到你的活动中?是使用FragmentManager还是其他?还有,你真的需要viewpager吗?如果你使用带有适配器的setpager,我认为你应该在适配器中设置页面,而不是在片段中。如果你在TabPagerAdapter类中扩展FragmentPagerAdapter,它应该有getItem方法,你应该在那里添加fragment,我想好的,也许你可以添加TabPagerAdapter类,这样我可以为你尝试