Matheo26

Membre
  • Content Count

    2
  • Joined

  • Last visited

Community Reputation

0 Neutre

About Matheo26

  • Rank
    Newbie
  1. Trouvé ! Une ligne avait été oubliée dans mon "app_bar_main.xml" : <include layout="@layout/content_main" /> Du coup sur chaque écran le contenu de mon écran principal était repris, d'où la redondance...
  2. Bonjour tout le monde, Dans le cadre d'un développement Android, j'ai besoin de concevoir une application qui utilise le même drawer sur chaque activité. J'ai donc suivi un tutoriel sur Internet afin de créer une activité de base avec mon drawer, et me servir de cette activité pour mes autres écrans. Voici mon activité de base : <?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> package assistance.utils; [...] 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); } 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); } } @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; } } Ici, mon activité principale : <?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> package assistance.main; [...] 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); addView(R.layout.content_main); //... } } Et pour finir une autre activité (search) que j'ouvre à partir de mon drawer : <?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> package assistance.main; [...] public class SearchActivity extends AppBaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addView(R.layout.content_search); //... } } Mon drawer s'affiche bien sur chaque activité. Lorsque je lance mon appli l'écran s'affiche correctement sur l'activité principale (voir Screenshot_20171017-093659). En revanche, quand j'ouvre ma seconde activité à partir de mon drawer, un phénomène étrange va se produire. Comme si toutes les vues qui ont été ajoutées à ma FrameLayout dans mon écran principale restaient en mémoire en plus des éléments ajoutés dans mon activité Search. Résultat : les 2 écrans se superposent... Est-ce que quelqu'un a une idée d'où peut venir ce problème ? Merci pour vos retours :-)