2013-06-15 4 views
5

У меня есть приложение, которое использует фрагменты. На одном из устройств моего пользователя (Коммуникатор HTC One), фрагменты накладываются друг на друга, и его экран заканчивает тем, как беспорядок:Экранные фрагменты Android перекрываются

enter image description here

Я попытался воспроизвести его на моем собственном оборудовании, хотя это а не HTC One. Я также пробовал использовать версию Android 4.1.2, которая является версией, которую он имеет, и она отлично работает. Не хватает времени на покупку HTC One, есть ли у кого-нибудь предложения?

Когда я добавляю в новом фрагменте, я делаю это

Fragment f = new MyFragment(); 
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); 
ft.replace(R.id.mainContent, f); 
ft.addToBackStack(null); 
ft.commit(); 

Мой XML макет (обрезанную до соответствующих частей):

<RelativeLayout> 
    <LinearLayout> 
     <!-- My home screen content is here --> 
    </LinearLayout> 

    <!-- This is where the fragment gets placed --> 
    <LinearLayout android:id="@+id/mainContent" 
        android:orientation="vertical" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent"> 
    </LinearLayout> 
</RelativeLayout> 

UPDATE

Фрагмент, который добавлено:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    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" 
    android:background="@drawable/app_bg"  
    tools:context=".DeviceListActivity" > 

    <!-- snipped! (for brevity) --> 
</RelativeLayout> 

Я играю вокруг - я заметил, что если я удалю андроид: фон, я могу воспроизвести проблему, которая заставляет меня поверить, что HTC One по какой-то причине приводит к тому, что свойство фона фрагмента игнорируется.

+0

HTC One использует ресурсы xxhdpi, вы их предоставляете? Кажется, что это может быть связано. – Dalmas

+0

@Dalmas. Это не вызовет проблемы с макетами, это вызовет проблемы с ресурсами, то есть загрузку неправильного ресурса. –

ответ

2

Оказывается, проблема была проблема ресурсов, но это не понятно, почему ...

Фоновый я был только в папке ldpi; обычно более высокие плотности будут использовать любую графическую информацию, однако в этом случае устройство игнорировало этот файл. Жук? Dunno - в любом случае исправление заключалось в создании ресурса для папки xxdpi, соответствующей одному и тому же имени.

0

Вы можете попробовать сменить контейнер фрагмента на FrameLayout и посмотреть, все ли это происходит. Поскольку у вас есть фон на вашем фрагменте, он должен скрыть предыдущий. Не уверен, почему это происходит только на этом устройстве.

<!-- This is where the fragment gets placed --> 
<FrameLayout android:id="@+id/mainContent" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
4

Я столкнулся с подобной ситуацией, и следующее работало на меня.

Проверьте, не спасет ли сохраненный файлInstanceState, если не-null, в этом случае транзакция фрагмента. Это решит проблему.

if (homeFragment == null) { 
    if (savedStateInstance != null) { 
    homeFragment = (HomeFragment) fragmentManager.findFragmentByTag(HOME_FRAGMENT); 
    return; 
} 
// tie new fragment 
homeFragment = new HomeFragment(); 
homeFragment.setArguments(bundle); 
FragmentTransaction transaction = fragmentManager.beginTransaction(); 
transaction.add(homeFragment, HOME_FRAGMENT); 
transaction.commit(); 
} 

Надеюсь, это поможет.

0

я сделал ...

мой макет mainactivity

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    android:background="@color/colorPrimary" 
    android:padding="10dp"> 

    <RelativeLayout 
     android:id="@+id/registerContainer" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <EditText 
      android:id="@+id/usernameEditText" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:padding="15dp" 
      android:layout_marginTop="15dp" 
      android:hint="USERNAME" 
      android:textColorHint="#FFFFFF" 
      android:textColor="#FFFFFF" 
      android:background="@drawable/edittext_style" 
      android:textAlignment="center"/> 

     <EditText 
      android:id="@+id/passEditText" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:padding="15dp" 
      android:layout_marginTop="15dp" 
      android:inputType="textPassword" 
      android:hint="PASSWORD" 
      android:textColorHint="#FFFFFF" 
      android:textColor="#FFFFFF" 
      android:textAlignment="center" 
      android:background="@drawable/edittext_style" 
      android:layout_below="@id/usernameEditText"/> 


     <EditText 
      android:id="@+id/phoneEditText" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:padding="15dp" 
      android:layout_marginTop="15dp" 
      android:inputType="phone" 
      android:hint="PHONE NUMBER" 
      android:textColorHint="#FFFFFF" 
      android:textColor="#FFFFFF" 
      android:background="@drawable/edittext_style" 
      android:textAlignment="center" 
      android:layout_below="@id/passEditText"/> 

     <EditText 
      android:id="@+id/emailEditText" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:padding="15dp" 
      android:layout_marginTop="15dp" 
      android:inputType="textEmailAddress" 
      android:hint="EMAIL" 
      android:textColorHint="#FFFFFF" 
      android:textColor="#FFFFFF" 
      android:background="@drawable/edittext_style" 
      android:textAlignment="center" 
      android:layout_below="@id/phoneEditText"/> 

     <Button 
      android:id="@+id/registerEditText" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/emailEditText" 
      android:text="REGISTER" 
      android:layout_marginTop="20dp" 
      android:background="#0b999b" 
      android:textColor="#000000" 
      android:textSize="18dp"/> 


    </RelativeLayout> 

    <FrameLayout 
     android:id="@+id/otpfragmentcontainer" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"></FrameLayout> 


</RelativeLayout> 

фрагмент перекрываться расположение является otp_fragment.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    android:background="@color/colorPrimary"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <TextView 
      android:id="@+id/textviewOTP" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Enter Your OTP" 
      android:textColor="#0b999b" 
      android:textStyle="bold" 
      android:textSize="24dp" 
      android:textAlignment="center" 
      android:layout_marginTop="200dp" 
      android:layout_marginBottom="5dp"/> 

     <EditText 
      android:id="@+id/otpEditText" 
      android:layout_width="300dp" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:padding="15dp" 
      android:layout_marginTop="15dp" 
      android:inputType="phone" 
      android:hint="EX: 456789" 
      android:textColorHint="#FFFFFF" 
      android:textColor="#FFFFFF" 
      android:background="@drawable/edittext_style" 
      android:textAlignment="center" 
      android:layout_below="@id/textviewOTP"/> 

     <Button 
      android:layout_width="100dp" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:text="ENTER" 
      android:background="#0b999b" 
      android:layout_centerHorizontal="true" 
      android:layout_below="@id/otpEditText"/> 


    </RelativeLayout> 

</LinearLayout> 

то, что я сделал это

 registerContainer.setVisibility(View.GONE); 

     FragmentManager fragmentManager = getFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     OTPFragment otpFragment = new OTPFragment(); 
      fragmentTransaction.add(R.id.otpfragmentcontainer, otpFragment); 
      fragmentTransaction.commit(); 

which disable registerContainer and display my fragment layout 
Смежные вопросы