0

으로 android.support.v4.app.ListFragment을 바꿀 때 ListFragment (지원 버전)를 사용하는 동안 방향이 바뀌면 응용 프로그램이 충돌하는 이유를 모르겠습니다. 모든 것이 잘 작동합니다. 나는이 방법을 사용하고 싶지 않다. "android:configChanges="orientation". 내 문제의 해결책으로 .오리엔테이션 충돌 응용 프로그램의 원인을 변경합니다. android.support.v4.app.ListFragment

  • 나는 모든 것은 괜찮습니다 (토지에 세로에서) 응용 프로그램을 실행 후 장치 처음으로 회전 할 때
  • 그러나 다시 (세로 토지) 충돌 충돌 충돌

문제는 지원되는 lib가 내 코드가 아니라고 생각합니다.

MainFragment 클래스 코드 :

package com.workout; 


import android.content.Context; 
import android.os.Bundle; 
import android.support.v4.app.ListFragment; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 


public class MainFragment extends ListFragment { 

    public MainFragment() {} 


    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     setListAdapter(new ArrayAdapter<>(getActivity(), 

    android.R.layout.simple_list_item_1,WorkoutDetail.workoutDetails)); 

     if (getListView() != null) 
      getListView().setOnItemClickListener((MainActivity)getActivity()); 

    } 
} 

MainActivity 코드 :

package com.workout; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 


public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener{ 


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

    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

     // Intent intent = new Intent(this,DetailActivity.class); 
     // intent.putExtra(Intent.EXTRA_TEXT,id); 
     // startActivity(intent); 
    } 
} 

MainActivity의 XML :

<?xml version="1.0" encoding="utf-8"?> 
<fragment 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:name="com.workout.MainFragment"/> 

로그 캣 세부 사항 :

12-14 22:17:58.383 7159-7159/com.workout E/AndroidRuntime: FATAL EXCEPTION: main 
                  Process: com.workout, PID: 7159 
                  java.lang.IllegalStateException: Fragment has not been attached yet. 
                   at android.support.v4.app.Fragment.instantiateChildFragmentManager(Fragment.java:2308) 
                   at android.support.v4.app.Fragment.getChildFragmentManager(Fragment.java:773) 
                   at android.support.v4.app.FragmentActivity.markState(FragmentActivity.java:967) 
                   at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:527) 
                   at android.support.v7.app.AppCompatActivity.onSaveInstanceState(AppCompatActivity.java:509) 
                   at android.app.Activity.performSaveInstanceState(Activity.java:1419) 
                   at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1301) 
                   at android.app.ActivityThread.callCallActivityOnSaveInstanceState(ActivityThread.java:4637) 
                   at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4588) 
                   at android.app.ActivityThread.-wrap19(ActivityThread.java) 
                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1514) 
                   at android.os.Handler.dispatchMessage(Handler.java:102) 
                   at android.os.Looper.loop(Looper.java:241) 
                   at android.app.ActivityThread.main(ActivityThread.java:6274) 
                   at java.lang.reflect.Method.invoke(Native Method) 
                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

이미 많은 stackoverflow 링크를 방문하지만 내 문제의 해결책을 찾지 못했습니다.

+0

모든 조각 그것이 listfragment이 경우를 포함과 관련된 XML 뷰를 가질 권리가있다 :

확인이 하나는 3 개의 레슨이 포함되어 있습니다. 모든 액티비티는이 경우 연관된 XML 뷰를 가질 자격이 있습니다.이 액티비티는 appcompativity입니다. 주 활동 XML 파일을 조각 XML 파일과 혼합합니다. XML은 정적이며 실행 중에 변경되지 않습니다. Java 코드는 동적이며 변경됩니다.오리 엔테이션 변경은 동적 이벤트이며 장치는 화면을 다시 그려주기 위해 활동 라이프 사이클을 거쳐야합니다. 설명하기가 어렵지만 더 많은 질문이있는 경우 도와 드리겠습니다. – Pomagranite

+0

기본 XML과 조각 XML을 혼합합니다. MainFragment는 ListFragment를 상속하고이 클래스는 XML 파일과 연결되지 않습니다. 이유 : 목록 조각은 프로그래밍 방식으로 자체 레이아웃을 정의합니다. MainActivity XML에서는 단편을 추가하는 중입니다. 문제가 어디에 있습니까 ?? –

+0

공용 클래스 MainActivity는 AppCompatActivity ...를 확장합니다. setContentView (R.layout.activity_main); 하지만 액티비티 _ 메인에서 < xmlns : android = "http://schemas.android.com/apk/res/android" android : layout_width = "match_parent" android : layout_height = "match_parent" android : name = " com.workout.MainFragment "/> – Pomagranite

답변

1

listener와 함께 존재하는 onListItemClick 및 activity에서 listener 구현을 제거하려고하면 listfragment에 listener를 구현할 필요가 없으며 아래의 방법을 사용하면 문제가 해결되기를 바랍니다.

public class MainFragment extends ListFragment { 

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 

    // put your code here 
} 
} 

옆에있는 위의 수행 (나는 이것을 테스트 한이 작동) (복사 및 붙여 넣기)를 다음과 같이 새로운 XLM 파일을 작성

<?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="wrap_content" 
    android:orientation="vertical"> 

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

</LinearLayout> 

가 동적으로 활동에 조각을 추가 할 다음 아래 :

public class MainActivity extends AppCompatActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    // Begin the transaction 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    // Replace the contents of the container with the new fragment 
    ft.replace(R.id.FragmentSlot, new MainFragment()); 
    // or ft.add(R.id.your_placeholder, new FooFragment()); 
    // Complete the changes added above 
    ft.commit(); 
} 
} 

이것은 실제로 문제를 해결합니다.

예 XLM에서 조각을 팽창시킬 때 시스템과 관련이 있습니다.

나중에 이것을 피하려면 조각 관리자를 추가하고 조각을 추가, 교체 및 제거하는 방법을 알아야합니다. https://developer.android.com/training/basics/fragments/index.html

+0

이 방법도 작동하지 않습니다. 문제가 계속 동일합니다. –

+0

업데이트 된 답변과 행운을 확인하십시오. – ams73

+0

감사합니다 ams73 ..이 방법은 작동합니다 ..하지만 왜 내 코드에서 실제로 문제가 있는지 알 수없는 이유를 말해 주실 수 있습니까? 정적으로 조각을 추가하는 것이 효과가없는 이유는 무엇입니까? 그리고 왜이 문제는 지원 라이브러리에서만 발생합니다. 기계적 인조 인간. app.ListFragment .. 잘 작동 회전 .. –

관련 문제