Ich versuche es genauer:
ich habe eine Main Activity:
public class settingsMain extends FragmentActivity implements ActionBar.TabListener {
private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private ActionBar actionBar;
private String[] tabs = { "E2Box", "Chromecast" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings_main);
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(this));
}
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
public class TabsPagerAdapter extends FragmentPagerAdapter {
public TabsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
return new settingsE2();
case 1:
return new settingsCast();
}
return null;
}
@Override
public int getCount() {
return 2;
}
}
Wenn ich das ganz Prinzip richtig verstanden habe, ist der Adapter dafür zuständig welcher Tab angezeigt wird.
Die Klasse des einen Tab sieht so aus:
public class settingsE2 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.activity_settings_e2, container, false);
e2settings = new e2(getActivity().getApplicationContext());
networkHelper = new network(getActivity().getApplicationContext());
return rootView;
}
}
und das ist die XML Datei (gekürzt):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="de.resper.enigma2chromecast.settingsE2">
<TextView
android:id="@+id/e2Status"
android:text=""
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="20sp"
android:padding="10dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="phone"
android:textSize="20sp"
android:id="@+id/editIp"
android:layout_margin="10dp"
android:hint="@string/ip"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/scanDevices"
android:id="@+id/scanDevices"
android:onClick="scanNetwork"
android:layout_gravity="center_horizontal"
android:padding="20dp"/>
</LinearLayout>
Konkrete Fragen:
- Wo integriere ich zum Beispiel einen Listener für den TextEdit oder einen setText, in der Main oder der Klasse?
- Schreibe ich Abläufe, die beim Öffnen des Tabs erfolgen sollen (zum Beispiel testen der aktuellen Konfiguration und Manipulation von TextViews in die main oder in die Klassen?
- Wenn ich das ganze in die Klassen schreibe und zum Beispiel das im ersten Beitrag erstelle Objekt in beiden Fragmenten brauche kann ich das in der Main erstellen und dann in den Fragmenten verwenden?
Evtl stelle ich mir es auch völlig falsch vor wie das ganze funktioniert. Ich gehe davon aus, dass die Main im Hintergrund läuft und alles verwaltet und die Fragmente bei bedarf dann dazu lädt. Wo ich dann denke es wäre doch logisch, wenn man in der Main Objekte definiert, die dann vom jeweils aktiven Fragment genutzt und verändert werden können.
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.