2017-01-07 2 views
1

Мое приложение падает из-за TextView. Он работает до тех пор, пока устройство не меняет ориентацию. Если удалить TextView и повернуть устройство, все будет хорошо, но с TextView это не так.
У меня есть 2 макета для портрета и макета.
Они выглядят так:Ошибка приложения из-за TextView в Android

<?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"> 

    <TextureView 
     android:id="@+id/texture" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <TextView 
     android:layout_width="220dp" 
     android:layout_height="50dp" 
     android:id="@+id/text_time" 
     android:textSize="20dp" 
     android:textColor="@color/red" 
     android:layout_marginTop="14dp" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentEnd="true" /> 

</RelativeLayout> 

И некоторый код:

public void onViewCreated(final View view, Bundle savedInstanceState) { 
     mTextView = (TextView) view.findViewById(R.id.text_time); 
     mTextView.setVisibility(View.INVISIBLE); 
} 

то в другом методе я установил текст:

mTextView.setVisibility(View.VISIBLE); 
mTextView.setText("Text"); 

и это все. Итак, есть ли у вас какие-либо соображения, почему это не работает?

я получаю следующее сообщение об ошибке:

01-07 17:14:28.117 12890-12890/k.com.kamera E/AndroidRuntime: FATAL EXCEPTION: main 
                    Process: k.com.kamera, PID: 12890 
                    java.lang.IllegalStateException: Fragment BasicFragmentVideo{e87fd0c} not attached to Activity 
                     at android.app.Fragment.getResources(Fragment.java:805) 
                     at android.app.Fragment.getString(Fragment.java:840) 
                     at k.com.kamera.BasicFragmentVideo$5$1$1.run(BasicFragmentVideo.java:483) 
                     at android.os.Handler.handleCallback(Handler.java:739) 
                     at android.os.Handler.dispatchMessage(Handler.java:95) 
                     at android.os.Looper.loop(Looper.java:168) 
                     at android.app.ActivityThread.main(ActivityThread.java:5845) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687) 
+0

использовать setretaininstance в классе фрагментов для сохранения экземпляра фрагмента –

+0

Можете ли вы предоставить какой-либо рабочий код? – hulapalu

ответ

0

Каждый раз, когда происходит изменение ориентации, вы создаете новый экземпляр фрагмента. И только один из них фактически привязан к Деятельности. Попробуйте

public class TestActivity extends Activity { 

    TestFragment testFragment; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.test_activity); 
     attachFragment(savedInstanceState); 
    } 

    private void attachFragment(Bundle savedInstanceState) { 
     if (savedInstanceState == null){ 
      testFragment = new TestFragment(); 
      getFragmentManager().beginTransaction() 
      .replace(R.id.camera_frame, testFragment,  "testFragment").commitAllowingStateLoss(); 
    } else { 
     testFragment = (TestFragment)getFragmentManager().findFragmentByTag("testFragment"); 
    } 
} 

вызова setRetainInstance(true) в вашем фрагменте onCreateView() или onActivityCreated()

+0

Я добавляю «Фрагмент» следующим образом: android.app.FragmentTransaction transaction = getFragmentManager(). BeginTransaction(); transaction.replace (R.id.camera_frame, fragInfo); transaction.commit(); – hulapalu

+0

Вы используете 'import android.app.fragment'? – rafsanahmad007

+0

Да. Он работает до тех пор, пока устройство не вращается, поэтому я не знаю, как исправить то, что – hulapalu

0

Используйте setRetainInstance, как верно в фрагменте это сохранит экземпляр фрагмента, когда ориентация происходит и теперь в Acitivty внутри OnCreate проверить для фрагмента экземпляр и добавить

+0

Хорошо, но если я установил значение true, текстовое представление больше не существует. Вы знаете, как это исправить? – hulapalu

 Смежные вопросы

  • Нет связанных вопросов^_^