0

У меня есть активность, распространяющаяся на FragmentActivity, которая имеет 4 фрагмента. Теперь я хочу открыть фрагмент2 при нажатии кнопки, который присутствует в фрагменте1. Короче говоря, я хочу переключиться с фрагмента 1 на фрагмент 2 при нажатии кнопки. Мой код: общественный класс SampleActivity расширяет FragmentActivity {Открытый фрагмент из фрагмента в android

static ViewPager mViewPager; 
PagingAdapter TabAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    TabAdapter = new PagingAdapter(getSupportFragmentManager(), this); 

    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mViewPager.setAdapter(TabAdapter); 
} 
public class PagingAdapter extends FragmentPagerAdapter { 

    private Context context; 
    public PagingAdapter(FragmentManager fm, Context context) { 
     super(fm); 
     this.context = context; 
    } 

    @Override 
    public Fragment getItem(int i) { 
     switch(i){ 
     case 0:   
      return new Fragment1(); 
     case 1: 
      return new Fragment2(); 
     case 2: 
      return new Fragment3(); 
     case 3: 
      return new Fragment4(); 
     } 
     return null; 
    } 

    @Override 
    public int getCount() { 
     return 4; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch(position){ 
     case 0: 
      return context.getString(R.string.page_tab_1); 
     case 1: 
      return context.getString(R.string.page_tab_2); 
     case 2: 
      return context.getString(R.string.page_tab_3); 
     case 3: 
      return context.getString(R.string.page_tab_4); 
     } 
     return "Fragment " + (position + 1); 
    } 
} 

public class Fragment1 extends Fragment{ 
    Button btn_close = (Button) mydeals.findViewById(R.id.btn_close); 
btn_all.setOnClickListener(new View.OnClickListener() { 

@Override 
public void onClick(View v) { 
    //Needs to open fragment2 here. 
}); 
} 

Я попытался сдвигая с помощью идентификатора, но fragment4 открывается с помощью кода ниже

ViewPager viewpager = DealsActivity.mViewPager; 
viewpager.setCurrentItem(getId()); 

ответ

0

В вашем Fragment1 макет, добавьте атрибут android:onClick="buttonClickMethod" в ваше определение Button. Тогда в вашей деятельности, добавьте следующий метод:

public void buttonClickMethod(View v) { 
    // some code to execute after button click 
    // .... 
    // You can open fragment 2 here, like this : 
    FragmentManager fm = getSupportFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.replace(R.id.LAYOUT_ID_FOR_FRAGMENT2, FRAGMENT2); 
    ft.commit(); 
} 

Обратите внимание, что имя этого метода является то же самое один определенный в атрибута.

+0

У меня нет LAYOUT_ID_FOR_FRAGMENT2. У меня есть отдельные XML-файлы для каждого фрагмента. И не будет ли FRAGMENT2 новым FRAGMENT2()? – isudansh

+0

'LAYOUT_ID_FOR_FRAGMENT2' и' FRAGMENT2' являются соответственно вашим ресурсом макета 'id' и экземпляром вашего класса' Fragment2'. Я просто хотел привести вам пример! –

Смежные вопросы