0

android.support.v4.app.ListFragmentandroid.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"/> 

Logcatの詳細:

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ビューを持つ権利があります。すべてのアクティビティにはXMLビューが関連付けられていますが、この場合はappActivityです。主な活動XMLファイルとフラグメントXMLファイルを混在させています。 XMLは静的であり、実行中は変更されません。 Javaコードは動的で変化します。オリエンテーションの変更は動的イベントであり、デバイスはアクティビティのライフサイクルを経て、画面を再描画する必要があります。これを説明するのは難しいですが、もっと質問があれば助けようとします – Pomagranite

+0

私は主な活動XMLと断片XMLを混在させています。 MainFragmentはListFragmentを継承し、このクラスはどのXMLファイルとも関連していません。reason:list フラグメントはプログラムによって独自のレイアウトを定義します。 MainActivity XMLで私は断片を追加しています。問題はどこですか? –

+0

public class MainActivityはAppCompatActivityを継承します。setContentView(R.layout.activity_main);しかし、activity_main Pomagranite

答えて

1

アクティビティからリスナの実装とonItemClickを削除し、listFragmentに存在するonListItemClickを使用しようとすると、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 
} 
} 

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

(私はこれをテストして、それが働いている) (コピー&ペースト)を次のように新しいXLMファイルをビルドする次の操作を行い、その後、動的活動にあなたのフラグメントを追加以下のようになります。

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から断片を膨らませるときにシステムに関連するものです。

今後これを避けるには、フラグメントマネージャーとトランザクションを使用してフラグメントを追加、置換、および削除する方法を学ぶ必要があります。

チェックこの1、3回のレッスンが含まれていますhttps://developer.android.com/training/basics/fragments/index.html

+0

このメソッドは動作しません..問題は同じままです –

+0

私の更新された答えを確認し、幸運。 – ams73

+0

ありがとうams73 ..このメソッドは動作します..しかし、本当に問題が何であるかを私のコードで理解できない理由を教えてください。そして、なぜこの問題はサポートライブラリでしかないのですか?アンドロイド。 app.ListFragment ..うまく動作します。 –

関連する問題