2016-07-15 3 views
4

В моей MainActivity class У меня есть вид пейджера с 3 вкладки fragmentHome class, fragmentHot class и FragmentCategoryclassметод вызова в фрагменте ребенка в родительском фрагменте от активности

Вот это fragmentCategory class:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view; 
    view = inflater.inflate(R.layout.fragmentcategory, container, false); 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    transaction.replace(R.id.category_fragment, new TabCategoryFragment()); 
    transaction.commit(); 
    return view; 
} 

В TabCategoryFragment class, у меня есть категория сетки новости и когда сетка щелчка щелчка:

FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
Bundle bundle = new Bundle(); 
bundle.putString("category", arrDataZone.get(position).getZone_name()); 
bundle.putString("zoneid", arrDataZone.get(position).getZone_id()); 
ListCategoryFragment myFrag = new ListCategoryFragment(); 
myFrag.setArguments(bundle); 
transaction.replace(R.id.category_fragment, myFrag,"listFramgnet"); 
transaction.addToBackStack("grid_category"); 
transaction.commit(); 

Теперь я хочу, чтобы метод вызова в ListCategoryFragment от MainActivity или вызов метода в ListCategoryFragment от FragmentCategory.

Потому что я пытаюсь вызова метода в FragmentCategory из MainACtivity с:

linearPlayer.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    int number=viewPager.getCurrentItem(); 
    Fragment fragment= adapter.getItem(number); 

    if (number==0) { 
     ((FragmentHome)fragment).playAudioSerVice(); 
    } else if(number==1) { 
     ((FragmentHot)fragment).playAudioSerVice(); 
    } else if(number==2) { 
     ((FragmentNew)fragment).playAudioSerVice(); 
    } else if(number==3) { 
     ((FragmentCategory)fragment).playAudioSerVice(); 
    } 
    } 
}); 

и он побежал. Пожалуйста, дайте мне свою идею или код, чтобы сделать это.

enter image description here

+0

Какой метод хотите позвонить деятельности? –

+0

@ ρяσѕρєяK нет, я хочу вызвать метод playAudioService() в ListCategoryFramgnet.class из MainActivty.class или из FragmentCategory.class –

+0

Затем назовите его как '((MainActivty) getActivity()) .. playAudioSerVice();' есть ли проблема при этом? –

ответ

0

Вы можете использовать Eventbus postSticky, чтобы решить ее, вы можете увидеть апи, eventbus

Я написал демку, чтобы имитировать ваш case.Here это код. MainActivity:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main22); 
     getSupportFragmentManager().beginTransaction().replace(R.id.contaner,new MainActivityFragment()).commit(); 
     EventBus.getDefault().register(this); 
    } 

    @Subscribe 
    public void changeFragment(ChangeFragmentEvent event) { 
     // get event from MainActivityFragment immediately--->EventBus.getDefault().post(new ChangeFragmentEvent()); 
     getSupportFragmentManager().beginTransaction().replace(R.id.contaner,PlusOneFragment.newInstance()).commit(); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     EventBus.getDefault().unregister(this); 
    } 
} 

MainActivityFragment:

public class MainActivityFragment extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_main22, container, false); 
    } 
    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     View button = view.findViewById(R.id.button); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       EventBus.getDefault().post(new ChangeFragmentEvent());//notify MainActivity change fragment 
       EventBus.getDefault().postSticky(new MEvent());//send a msg to PlusOneFragment,when it shown 
      } 
     }); 
    } 
} 

PlusOneFragment:

public class PlusOneFragment extends Fragment { 

    public PlusOneFragment() { 
    } 

    public static PlusOneFragment newInstance() { 
     PlusOneFragment fragment = new PlusOneFragment(); 
     return fragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     EventBus.getDefault().register(this); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_plus_one, container, false); 
     return view; 
    } 

    @Subscribe(sticky = true) 
    public void getMEvent(MEvent event){ 
     // get event from MainActivityFragment when PlusOneFragment show --->EventBus.getDefault().postSticky(new MEvent()); 
     Toast.makeText(getActivity(),"Hello,there",Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
     EventBus.getDefault().unregister(this); 
    } 

} 
+0

спасибо, я попробую –

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