Derzeit versuche ich, die Basis-Benutzeroberfläche einer Anwendung so zu abstrahieren, dass sie um untergeordnete Fragmente erweitert werden kann, die Hauptelemente wie die Elemente der Navigation erben Einstellungsmenüs. Die untergeordneten Elemente würden dann die grundlegende Benutzeroberfläche verwenden und den Rest der Benutzeroberfläche erstellen. Wenn Sie jedoch die Ansicht nicht explizit in der onCreate-Methode der untergeordneten Klasse festlegen, ist das Ergebnis eine leere Aktivität.SetContentView führt zu einer leeren Benutzeroberfläche, wenn von anderer Stelle in der Anwendung aufgerufen
Ist es einfach nicht möglich, die Inhaltsansicht an anderer Stelle als im oncreate der untergeordneten Klasse festzulegen?
-Code unten:
Abstrakte Basisklasse:
public abstract class BaseUIActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
protected DrawerLayout drawer;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//generateUI(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu m){
getMenuInflater().inflate(R.menu.main, m);
return super.onCreateOptionsMenu(m);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {...}
@Override
public void onBackPressed() {...}
@Override
public boolean onNavigationItemSelected(MenuItem item) {...}
public void generateUI(int layoutID){
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
Log.d("layoutID: ",""+String.valueOf(layoutID));
this.setContentView(layoutID);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
Log.d("Drawer: ", "" + String.valueOf(findViewById(R.id.drawer_layout)));
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
Log.d("Toggle: ", "" + String.valueOf(toggle));
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
}
Probe Child:
public class MainActivity extends BaseUIActivity implements OnNavigationItemSelectedListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
//generateUI(R.layout.activity_main);
//listViewEvents = (ListView) findViewById(R.id.listViewEvents);
}
}
Ihre Basisklasse ist abstrakt, Sie müssen Ihre Sicht übergeben, um die Ansicht für die erste Aktivität zu generieren. –
@MurtazaKhursheedHussain Wenn ich mich nicht täusche, habe ich das gemacht, als ich den int-Wert der layoutID an generateUI() übergeben habe, was sie in einer eigenen setContentView verwendet, aber auch zu einer leeren Schnittstelle geführt hat. – Potatosaurus
Welche Aktivitätsklasse hast du in deinem Manifest definiert? Ich würde erwarten, dass BaseUIActivity abstrakt ist und in Ihrem Manifest nicht enthalten ist. Sie sollten MainActivity stattdessen hinzufügen, bestätigen Sie bitte. – ishmaelMakitla