2017-04-04 7 views
1

Wie kann ich Methode in Fragment von Aktivität aufrufen? Ich suchte einen Code, aber die meisten Menschen die Verwendung wie diese,Android - So rufen Sie Methode in Fragment von Aktivität

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

aber ich habe nicht Fragment in meinem xml

ich eine andere Art und Weise müssen Fragment-Methode aufrufen.

Das ist Methode in Fragment

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

Und das ist meine Tätigkeit

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); 
    } 
} 

Antwort

4

Wenn Sie einen Tag-String-Fragment über den Code und verwendet hinzugefügt, wenn Sie Ihr Fragment hinzugefügt, verwenden findFragmentByTag() stattdessen:

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

Ich fügte Fragment wie dieseshinzuAdapteradapter = neuer Adapter (getSupportFragmentManager()); adapter.addFragment (neuer TwitchChannel(), "channel"); adapter.addFragment (neuer TwitchStream(), "stream"); adapter.addFragment (neu TwitchFeed(), "feed"); adapter.addFragment (neues TwitchVideo(), "video"); So kann ich findFragmentByTag() nicht verwenden –

Verwandte Themen