Android - 如何从活动中调用片段中的方法

问题描述:

如何从活动中调用片段中的方法? 我搜索了一些代码,但大多数的人表示使用这样的,Android - 如何从活动中调用片段中的方法

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment); 
fragment.specific_function_name(); 

,但我没有片段,我的XML

我需要另一种方式来调用片段的方法。

这是片段

public void video() 
{ 
    new getVideo().execute(); 
} 

方法,这是我的活动

public class ActivityTwitch extends AppCompatActivity 
{ 
    Toolbar toolbar; 
    TabLayout tabLayout; 
    ViewPager viewPager; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_twitch); 

     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     getSupportActionBar().setTitle("개구멍"); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     toolbar.setNavigationOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       finish(); 
       overridePendingTransition(R.anim.fade_in, R.anim.fade_out); 
      } 
     }); 

     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

     Adapter adapter = new Adapter(getSupportFragmentManager()); 
     adapter.addFragment(new TwitchChannel(), "채널"); 
     adapter.addFragment(new TwitchStream(), "스트리밍"); 
     adapter.addFragment(new TwitchFeed(), "게시물"); 
     adapter.addFragment(new TwitchVideo(), "동영상"); 

     viewPager = (ViewPager) findViewById(R.id.viewPager); 
     viewPager.setAdapter(adapter); 

     tabLayout = (TabLayout) findViewById(R.id.tabLayout); 
     tabLayout.setupWithViewPager(viewPager); 
    } 

    public class Adapter extends FragmentPagerAdapter 
    { 
     private final List<Fragment> mFragments = new ArrayList<>(); 
     private final List<String> mFragmentTitles = new ArrayList<>(); 

     public Adapter(FragmentManager fm) 
     { 
      super(fm); 
     } 

     public void addFragment(Fragment fragment, String title) 
     { 
      mFragments.add(fragment); 
      mFragmentTitles.add(title); 
     } 

     @Override 
     public Fragment getItem(int position) 
     { 
      return mFragments.get(position); 
     } 

     @Override 
     public int getCount() 
     { 
      return mFragments.size(); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) 
     { 
      return mFragmentTitles.get(position); 
     } 
    } 

    @Override 
    public void onBackPressed() 
    { 
     super.onBackPressed(); 
     overridePendingTransition(R.anim.fade_in, R.anim.fade_out); 
    } 
} 

如果通过代码添加的片段,当你添加您的片段用一个代码字符串,用findFragmentByTag()改为:

YourFragmentClass fragment = (YourFragmentClass)fm.findFragmentByTag("yourTag"); 
+0

我加了这样的片段 Adapter adapter = new Adapter(getSupportFragmentManager()); adapter.addFragment(new TwitchChannel(),“channel”); adapter.addFragment(new TwitchStream(),“stream”); adapter.addFragment(new TwitchFeed(),“feed”); adapter.addFragment(new TwitchVideo(),“video”); 所以我不能使用findFragmentByTag() –