Ich muss eine Android-App, die die gleiche Schublade verwenden. Ich fand ein Tutorial über Internet und hier ist mein Quellcode:Anzeige Fehler auf Aktivität Recycling
Mein AppBaseActivity:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<FrameLayout
layout="@layout/app_bar_main"
android:id="@+id/vue"
android:paddingTop="?attr/actionBarSize"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />
</android.support.v4.widget.DrawerLayout>
Java AppBaseActivity:
package assistance.utils;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.FrameLayout;
import assistance.R;
import assistance.main.SearchActivity;
import assistance.main.SettingsActivity;
public abstract class AppBaseActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
private FrameLayout vue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.app_base_activity);
vue = (FrameLayout) findViewById(R.id.vue);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
super.setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
toolbarSearch = (EditText) findViewById(R.id.toolbarSearch);
toolbarSearch.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
//...
}
});
toolbarSearch.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int i, KeyEvent keyEvent) {
Intent intent = new Intent(getBaseContext(), SearchActivity.class);
view.getContext().startActivity(intent);
return false;
}
});
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
@Override
public void setContentView(int layoutResID){
if (vue!=null){
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
);
View stubView = inflater.inflate(layoutResID, vue, false);
vue.addView(stubView, lp);
}
}
@Override
public void setContentView(View view){
if (vue!=null){
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
);
vue.addView(view, lp);
}
}
@Override
public void setContentView(View view, ViewGroup.LayoutParams params){
if (vue!=null) {
vue.addView(view,params);
}
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
return super.onOptionsItemSelected(item);
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.nav_manage) {
startActivity(new Intent(this,SettingsActivity.class));
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}
XML Hauptaktivität:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="assistance.main.MainActivity">
<TextView
android:padding="5dp"
android:text="Evolution du chiffre d'affaires"
android:background="@drawable/layout_rubrique_title"
android:layout_width="match_parent"
android:textStyle="bold"
android:textSize="16dp"
android:layout_height="wrap_content" />
<com.github.mikephil.charting.charts.CombinedChart
android:id="@+id/chart"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_width="match_parent"
android:layout_height="200dp" />
<TextView
android:padding="5dp"
android:text="Affaires en cours"
android:background="@drawable/layout_rubrique_title"
android:layout_width="match_parent"
android:textStyle="bold"
android:textSize="16dp"
android:layout_height="wrap_content" />
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
android:id="@+id/opportunites" />
</LinearLayout>
Java Haupt Aktivität:
package assistance.main;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import com.github.mikephil.charting.animation.Easing;
import com.github.mikephil.charting.charts.CombinedChart;
import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.components.Description;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.data.CombinedData;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.formatter.IAxisValueFormatter;
import java.util.ArrayList;
import java.util.List;
import assistance.R;
import assistance.utils.AppBaseActivity;
public class MainActivity extends AppBaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.content_main);
//...
}
}
Und schließlich XML Such Aktivität:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/content_search"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="assistance.main.SearchActivity" >
<ScrollView
android:id="@+id/seaRecords"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:id="@+id/seaResultats" />
</ScrollView>
</RelativeLayout>
und Java Suche Aktivität:
package assistance.main;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import assistance.R;
import assistance.utils.AppBaseActivity;
import java.util.ArrayList;
public class SearchActivity extends AppBaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.content_search);
//...
}
}
Ich habe meine Schublade für jede Aktivität, aber wenn ich eine andere Tätigkeit vom Haupt öffnen, ich habe ein Problem: Alle Elemente, die auf meinem Framelayout in der Hauptaktivität hinzugefügt wurden, bleiben auf dem Bildschirm vor den neuen Elementen ...
Gibt es jemanden, der mir bitte hilft?
Vielen Dank im Voraus :)
Vielen Dank für Ihre antwort, aber das problem ist immer noch relevant ... :( – Matheo26
siehe den aktualisierten code – Anonymous
ich muss re Bewegen Sie meine AppBar auf meiner BasisActivity? Wenn ich das mache, muss ich es bei jeder Aktivität hinzufügen? Das gleiche Problem, wenn ich Ansichten direkt zu der FrameLayout auf meinem BaseActivit hinzufügen? – Matheo26