2017-10-17 5 views
0

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?

Main activity:

Search activity:

Vielen Dank im Voraus :)

Antwort

0

Dont die setContentView() überschreiben method.Instead eine andere Methode erstellen Sie Ihre Ansicht zu laden.

public void addView(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); 
    } 
} 

Und in Ihrer Haupttätigkeit und Such Aktivität rufen Sie die Methode

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addView(R.layout.content_main); 
    //... 
} 

EDIT: Auch die app_bar_main entfernen und fügen Sie Ansichten über das Rahmenlayout

<include 
     layout="@layout/app_bar_main" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
+0

Vielen Dank für Ihre antwort, aber das problem ist immer noch relevant ... :( – Matheo26

+0

siehe den aktualisierten code – Anonymous

+0

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

Verwandte Themen