2016-01-21 4 views
2

Как вы можете видеть на этой фотографии, если я нажму кнопку 2 в заголовке 1, появится Fragment в FrameLayout. Однако, если я прокручу до заголовка 2, две кнопки не работают.Как получить доступ к кнопке в следующем фрагменте после прокрутки?

enter image description here

Вот код:

package com.flashcards; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

/** 
* A simple {@link Fragment} subclass. 
* Use the {@link BaseFlashCardsFragment#newInstance} factory method to 
* create an instance of this fragment. 
*/ 
public class BaseFlashCardsFragment extends Fragment implements View.OnClickListener { 
    // TODO: Rename parameter arguments, choose names that match 
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER 
    private static final String ARG_POSITION = "position"; 

    // TODO: Rename and change types of parameters 
    private int position; 
    private String mParam2; 

    public BaseFlashCardsFragment() { 
     // Required empty public constructor 
    } 

    /** 
    * Use this factory method to create a new instance of 
    * this fragment using the provided parameters. 
    * 
    * @param position Parameter 1. 
    * @return A new instance of fragment BaseFlashCardsFragment. 
    */ 
    // TODO: Rename and change types and number of parameters 
    public static BaseFlashCardsFragment newInstance(int position) { 
     BaseFlashCardsFragment fragment = new BaseFlashCardsFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(ARG_POSITION, position); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (getArguments() != null) { 
      position = getArguments().getInt(ARG_POSITION, 0); 
     } 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View rootView = null; 
     int layoutId; 
     switch (position) { 
      case 0: layoutId = R.layout.limits_flashcardsfragment1; break; 
      case 1: layoutId = R.layout.limits_flashcardsfragment2; break; 
      default: layoutId = R.layout.limits_flashcardsfragment3; break; 
     } 

     rootView = inflater.inflate(layoutId, container, false); 
     rootView.findViewById(R.id.buttonterm).setOnClickListener(this); 
     rootView.findViewById(R.id.buttondefinition).setOnClickListener(this); 
     switchPage(new limits_fragmentpageA()); 
     switchPage(new limits_fragmentpageB()); 

     return rootView; 
    } 

    @Override 
    public void onClick(View view) { 
     int viewId = view.getId(); 

     if (viewId == R.id.buttonterm) 
      switchPage(new limits_fragmentpageA()); 
     else if (viewId == R.id.buttondefinition) 
      switchPage(new limits_fragmentpageAA()); 
     else if (viewId == R.id.buttonterm) 
      switchPage(new limits_fragmentpageB()); 
     else if (viewId == R.id.buttondefinition) 
      switchPage(new limits_fragmentpageBB()); 

    } 

    private void switchPage (Fragment fragment){ 
     android.support.v4.app.FragmentManager manager = getFragmentManager(); 
     manager.beginTransaction() 
       .replace(R.id.activity_main_fragmentcontainer, fragment) 
       .commit(); 
    } 
} 

Вы также download the project можете получить четкое представление.

ответ

0

Как я вижу, вам нужно иметь ВСЕ элементы (кнопки, просмотрщик, заголовок и т. Д.) В своей деятельности, а не фрагмент, потому что он разделяется между всеми фрагментами, поэтому вам не нужно их воссоздавать в каждом фрагменте ,

Чтобы изменить заголовок (и нижний подсказку), вам необходимо добавить OnPageChangeListener к адаптеру viewpager.

Для переключения фрагмента между термином/определение необходимо передать событие непосредственно в OnClickListener этих кнопок, как «(BaseCardFragment)adapter.instantiateItem(viewpager,viewpager.getCurrentItem).flipToTerm() or flipToDefinition()»

0

Я думаю, что проблема в том, что если вы находитесь в фрагменте вы должны вы getChildFragmentManager() вместо getFragmentManager() Вероятно, вы должны просто переписать switchPage() как это

private void switchPage (Fragment fragment){ android.support.v4.app.FragmentManager manager = getChildFragmentManager(); manager.beginTransaction() .replace(R.id.activity_main_fragmentcontainer, fragment) .commit(); }

+0

getChildFragmentManager(); работает, однако он может отображать только один фрагмент, и эта строка кода не работает «switchPage (new limits_fragmentpageB());» Я хочу, чтобы он переключился на новый фрагмент. –

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