Hallo,
in meiner APP gibt es zwei TAB-Reihen. Die erste (obere) bestimmt den Inhalt der zweiten Tab-Reihe (siehe Foro). Über eine mainActivity wird ein Fragment gestartet welches dann eine View erzeugt. Je nach Tab-Konstellation wird eigentlich immer das gleiche Frag,ment gestartet. Solnage ich mich nur in der zweiten Tab-Ebene befinde ist alles OK. Selbst in der ersten Tab-Ebene kann ich vorwärts gehen. Aber wenn ich in der obersten Ebene mindestens einen Tab zurück gehe, wird keine View mehr gebildet ??? Ich vermute, daß die ersten Fragmwnts immer noch aktiv sind, deshalb nicht neu geladcen werden. Aber wie kann ich diese wieder aktivieren , oder liege ich vollkommen falsch ?
So richtig verstehe ich die Rolle der FragmentActivity wahrscheinlich nicht, ohne Inhalt stürzt das Programm ab.
......
public class MainActivity extends AppCompatActivity {
TabLayout tabLayout;
TabLayout tabChef;
TabLayout tabBar;
ViewPager2 viewPager2;
public String tag;
final static String MY_DB_NAME = "checktaskdb";
final static String MY_DB_TABLE = "aufgabenliste";
final static String MY_DB_historytable = "history";
final static String MY_DB_tabtable = "tabtable";
final static String MY_DB_aufgabentable = "aufgaben_table";
final static String MY_DB_bereichstable = "bereiche_table";
final static String MY_DB_intervalltable = "intervall";
final static String MY_DB_alleidtable = "alleidtable";
final static String MY_DB_listenpositiontable = "listenposition";
final static String MY_DB_anzeigekriterientable = "anzeigekriterien";
final static String MY_DB_bl = "bl_table";
int Anzahl_der_Tabs;
private static String DB_PATH = "/data/data/com.fk.CheckTasks/databases/";
private static String DB_NAME = "checktaskdb";
private ViewPager viewPager;
private TabLayout mTabLayout;
private TabAdapter tabAdapter;
public String[] data ={"A"};
public int position, ort, dataCount,i,anzahlOrte,chefCount;
private String sSQL, tabTitel;
private DBHelper myDB;
Cursor cTab, cChef;
private String[] ortsTitel;
private Integer[] chefID;
private String[] chefName;
private Integer[] ortsID;
public TabHost tabHost;
private Button button_tabBearbeiten, button_chefBearbeiten;
private Integer bl_id=1, tabPos;
public CharSequence tabText;
@Override
protected void onRestart() {
super.onRestart();
// Log.d("lifecycle","onRestart invoked");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab_button_layout);
Intent intent = getIntent();
tabTitel= intent.getStringExtra("tabname");
chefCount = chefAuslesen(); // zuerst den BL, da die ID für die Tabs benötigt wird
ChefTabs_erzeugen();
initViews(); // die Orte/Märkte Tabs
tabBar.setTabMode(TabLayout.MODE_SCROLLABLE);
button_tabBearbeiten = findViewById(R.id.button_ort);
//button_tabBearbeiten.setOnClickListener(this);
button_tabBearbeiten.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view)
{
// Toast.makeText(this, "Einstellungen ", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getActivity(),TabBearbeitenActivity.class);
intent.putExtra("bl",bl_id);
startActivity(intent);
}
});
button_chefBearbeiten = findViewById(R.id.button_bl);
//button_tabBearbeiten.setOnClickListener(this);
button_chefBearbeiten.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view)
{
// Toast.makeText(this, "Einstellungen ", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getActivity(),BL_Activity.class);
//intent.putExtra("id",id_orte);
startActivity(intent);
// finish();
}
});
// Tab BL/ Chef die obere erste Tabreihe wird gedrückt
tabChef.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
bl_id= tab.getPosition() +1;
tabText = tab.getText();
tabPos = tab.getPosition()+1;
initViews();
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
// zuerst vorhergehenden Tab
tabText = tab.getText();
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
int k=0;
k++;
}
});
Intent intent2 = new Intent().setClass(this, TabAdapter.class);
intent2.putExtra("chefid", bl_id);
};
private Context getActivity() {
return this;
}
@SuppressLint("MissingInflatedId")
private View TabViewErstellen(final Context context, final String text) {
View view = LayoutInflater.from(context).inflate(R.layout.tab_layout, null);
TextView tv = (TextView) view.findViewById(R.id.tabsText);
tv.setText(text);
return view;
}
// die Strings[] und Integer[] werden mit den Tabs Bezirksleiter und Markt gefüttert
public Integer TabsAuslesen (){
myDB = new DBHelper(this);
dataCount=0;
ortsID = new Integer [50];
ortsTitel = new String [50];
sSQL = "SELECT * FROM tabtable WHERE bl = "+bl_id+" ;";
cTab = myDB.doSQL(sSQL);
if ( cTab != null) {
dataCount = cTab.getCount();
i=0;
while (cTab.moveToNext() ) {
i++;
ortsTitel[i] = cTab.getString(1);
ortsID[i] = cTab.getInt(0);
}
}
return dataCount;
}
public Integer getChef() {
return bl_id;
}
public Integer chefAuslesen (){
myDB = new DBHelper(this);
chefCount=0;
chefID = new Integer[15];
chefName = new String[15];
sSQL = "SELECT * FROM bl_table ;";
cChef = myDB.doSQL(sSQL);
if ( cChef != null) {
chefCount = cChef.getCount();
i=0;
while (cChef.moveToNext() ) {
chefName[i] = cChef.getString(1);
chefID[i] = cChef.getInt(0);
i++;
}
}
bl_id=chefID[0];
return chefCount;
}
protected void initViews() {
int dataCount = 0;
myDB = new DBHelper(this);
tabBar = findViewById(R.id.tabBar);
viewPager2 = findViewById(R.id.view_pager);
tabAdapter = new TabAdapter(MainActivity.this,position);
//tabAdapter = new TabAdapter.getSupport
viewPager2.setAdapter(tabAdapter);
//dataCount = chefAuslesen(); // zuerst den BL, da die ID für die Tabs benötigt wird
dataCount = TabsAuslesen();
// die Märkte werden in den Tabs hinterlegt
new TabLayoutMediator(tabBar, viewPager2, new TabLayoutMediator.TabConfigurationStrategy() {
@Override
public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
tabTitel = ortsTitel[position+1];
tab.setText(tabTitel);
// ort= tab.getId();
}
}).attach();
tabBar.setTabMode(TabLayout.MODE_AUTO);
}
// die erste, obere Tabreihe wird erzeugt
private void ChefTabs_erzeugen() {
tabChef = findViewById(R.id.tabChef);
for(int i=0;i<=chefCount;){
tabChef.addTab(tabChef.newTab().setText(chefName[i]));
i++;
}
tabChef.setTabMode(TabLayout.MODE_SCROLLABLE);
}
}
Alles anzeigen
Hier mein FreagmentStateAdapter
package com.fk.CheckTasks;
......
public class TabAdapter extends FragmentStateAdapter {
private int position;
public DBHelper myDB;
private String sSQL;
private int dataCount;
Cursor cOrt;
int tabCount,bl_id;
private ArrayList<Fragment> fragments;
public TabAdapter(@NonNull FragmentActivity fm, int position) {
super(fm);
this.position = position;
bl_id = F_checklist.getChef()+1;
myDB = new DBHelper(fm.getApplicationContext());
sSQL = "SELECT * FROM tabtable WHERE bl= "+bl_id+" ;";
cOrt = myDB.doSQL(sSQL);
dataCount=1;
if ( cOrt != null) {
dataCount = cOrt.getCount();
}
}
@NonNull
@Override
public Fragment createFragment(int position) {
Fragment fragment = new F_checklist();
Bundle args = new Bundle();
args.putInt("tabort", position+1);
fragment.setArguments(args);
return fragment;
}
@Override
public int getItemCount() {
return dataCount;
}
}
Alles anzeigen