Ich habe eine Aktivität, PagerAdapter (um ein Fragment zurückzugeben) und ViewPager innerhalb der Aktivität.So rufen Sie eine Methode in einem Fragment von einer Aktivität
Andere schlagen vor, den folgenden Code
ExampleFragment fragment = (ExampleFragment)getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.specific_function_name();
jedoch mit, ich nicht einen Weg finden kann R.id.example_fragment
eine Referenz des Fragments zu erhalten.
Hier ist meine Tätigkeit
public class TestActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText("Test1"));
tabLayout.addTab(tabLayout.newTab().setText("Test2"));
tabLayout.addTab(tabLayout.newTab().setText("Test3"));
tabLayout.addTab(tabLayout.newTab().setText("Test4"));
tabLayout.addTab(tabLayout.newTab().setText("Test5"));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
viewPager = (ViewPager) findViewById(R.id.pager);
adapter = new PagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
tabLayout.setScrollPosition(pageIndex,0f,true);
viewPager.setCurrentItem(pageIndex);
}
}
das Layout
<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />
<android.support.v4.widget.DrawerLayout
android:layout_below="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main_layout" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:tabTextAppearance="@style/menuTheme"
app:tabIndicatorHeight="4dp"
app:tabMode="scrollable"
/>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
/>
</LinearLayout>
<fragment
android:id="@+id/fragment_navigation_drawer"
android:name="com.musicplayer.mp3player.activities.FragmentDrawer"
android:layout_width="@dimen/nav_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
app:layout="@layout/fragment_navigation_drawer"
tools:layout="@layout/fragment_navigation_drawer" />
</android.support.v4.widget.DrawerLayout>
</RelativeLayout>
der Code für den Pageadapter
public class PagerAdapter extends FragmentPagerAdapter {
int mNumOfTabs;
public PagerAdapter(FragmentManager fm, int NumOfTabs) {
super(fm);
this.mNumOfTabs = NumOfTabs;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
TestFragment testFragment = new TestFragment();
return testFragment;
case 1:
TestFragment testFragment2 = new TestFragment2();
return testFragment2;
case 2:
TestFragment testFragment3 = new TestFragment3();
return testFragment3;
case 3:
TestFragment testFragment4 = new TestFragment4();
return testFragment4;
case 4:
TestFragment testFragment5 = new TestFragment5();
return testFragment5;
default:
return null;
}
}
@Override
public int getCount() {
return mNumOfTabs;
}
}
Wenn Sie fragen wollen, wie Sie die 'id' finden, um auf ein bestimmtes Fragment zu verweisen, dann müssen Sie es programmgesteuert einstellen: http://StackOverflow.com/a/13244471 –