Ich bin mit einem ziemlich frustrierenden Fehler in meiner App konfrontiert, lassen Sie mich erklären: Ich habe eine MainActivity mit einer appBar mit 3 Tabs, und auf jedem Tab wird ein Fragment angezeigt. Das Problem kommt, wenn ich versuche, ein anderes Fragment zu essen und es den ganzen Bildschirm ersetzen zu lassen. Das neue Fragment wird auf dem Ersetzten angezeigt und die zwei sind sichtbar.So zeigen Sie das Fragment in einem Register an Aktivität
Hier ist mein Code:
The MainActivity:
public class MainActivity extends AppCompatActivity {
public static Model model;
public static Controller controller;
private SectionsPagerAdapter mSectionsPagerAdapter;
private ViewPager mViewPager;
private static final int PERMISSION_GALERIE = 10;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
this.model = new Model();
this.controller = new Controller(model,this);
final Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager)findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
TabLayout tabLayout = (TabLayout)findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
}
@Override
public boolean onCreateOptionsMenu(android.view.Menu menu) {
getMenuInflater().inflate(R.menu.settings,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.db_setting) {
getFragmentManager().beginTransaction().replace(R.id.mainLayout, new DBSettingFragment()).commit();
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode==PERMISSION_GALERIE){
if(grantResults.length==1 && grantResults[0]== PackageManager.PERMISSION_GRANTED){
Snackbar.make(getCurrentFocus(),"Permission accordée",Snackbar.LENGTH_SHORT);
}
}
else{
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public android.support.v4.app.Fragment getItem(int position) {
Fragment menusManagementFragment = new MenusManagementFragment();
switch (position) {
case 0:
return menusManagementFragment;
case 1:
OrdersManagementFragment ordersManagementFragment = new OrdersManagementFragment();
return ordersManagementFragment;
case 2:
DeliversManagementFragment deliversManagementFragment = new DeliversManagementFragment();
return deliversManagementFragment;
default: return menusManagementFragment;
}
}
@Override
public int getCount() {
return 3;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Gestion des menus";
case 1:
return "Gestion des commandes";
case 2:
return "Gestiond des livreurs";
}
return null;
}
}}
Die main_layout:
<android.support.design.widget.CoordinatorLayout 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/mainLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay">
</android.support.v7.widget.Toolbar>
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
Und in DeliversManagementFragment ich tun:
deliverStatsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getFragmentManager().beginTransaction().replace(R.id.mainLayout,new DeliverStatsFragment()).commit();
}
});
Wenn jemand, dass sein würde helfen könnte nett. Danke.
Hallo Rahul und danke für deine Antwort. Ich möchte alle Bildschirm-Ansicht ersetzen, einschließlich der Tab-Leiste – OTmn
ok dann machen Sie Ihre ** DeliverStatsFragment ** Hintergrundfarbe als weiß und setzen Sie ** clickable = "true" ** –
Das ist clever. Lass mich das versuchen. Warum muss ich clickable auf true setzen? – OTmn