3

アプリケーションのデュアルペイン/シングルペインのセットアップを作成しようとしています。すべてのイナードをフラグメントに入れる前は、しばらく前は正常に機能していましたが、何が原因で機能しなかったのかわかりません。向きを変えているときに問題が発生しています。最初は、何らかの理由でビューを再現していませんでした。onCreateViewを呼び出しますが、ビュー内のリストビューのハンドルを取得できず、nullになりました(縦向きと横向きの両方で機能するため、横向きと縦向きのレイアウトが正しいことはわかっています。 )。したがって、私が行ったことは、setRetainInstanceをtrueに追加することであり、これで問題が解決すると考えています。さて、それは今のまったく別の問題を引き起こしました。私はIDのビューが見つかりません。

私が今起こっていると思うのは、向きが変わる前に持っていたIDに自分自身を再接続しようとしていることであり、現在は別のレイアウトにあるように存在していません。新しいフラグメントを作成して追加しようとしましたが、それも機能しません。私は、Androidの思考フラグメントシステムを使用しようとして、髪の毛を抜いて境界線を引いています。これは、ほとんど使用できません。どんな助けでもいただければ幸いです。関連するコードは次のとおりです

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.study_guide);
    //Create The Ad Service

    //Check to see if the view is landscape or portrait
    if (this.findViewById(R.id.singlePaneStudyGuide) != null) {
        mDualPane = false;
    } else if (this.findViewById(R.id.doublePaneStudyGuide) != null) {
        mDualPane = true;
    }
    LinearLayout layout = (LinearLayout)findViewById(R.id.addbox);
    adView = new AdView(this,AdSize.SMART_BANNER,"a1511f0352b42bb");
    layout.addView(adView);
    AdRequest r = new AdRequest();
    r.setTesting(true);
    adView.loadAd(r);



    //Inflate Fragments depending on which is selected
    //if (savedInstanceState == null) {
        FragmentManager fm = this.getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();

        SGListFragment newFrag = new SGListFragment();

        if (mDualPane == true) {
            ft.add(R.id.sgScrollContainer, newFrag, "SgListView").commit();
        } else {
            ft.add(R.id.singlePaneStudyGuide, newFrag, "SgListView").commit();

        }
        fm.executePendingTransactions();
    //}
}

フラグメントマネージャーでフラグメントを探して別のレイアウトに再割り当てしようとしましたが、何らかの理由で古いものを探しています。

4

1 に答える 1

2

次のようにコードを書き直す必要があります。

    //Inflate Fragments depending on which is selected
    //if (savedInstanceState == null) {
    FragmentManager fm = this.getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    // here the trick starts 
    int oldId = (mDualPane == true) ? R.id.singlePaneStudyGuide 
                                    : R.id.sgScrollContainer;
    Fragment oldFragment = fm.findFragmentById(oldId);
    if(null != oldFragment){
        ft.remove(oldFragment);
        ft.commit();
        fm.executePendingTransactions();
        ft = fragmentManager.beginTransaction();
    }
    // end of tricks
    SGListFragment newFrag = new SGListFragment();

    if (mDualPane == true) {
        ft.add(R.id.sgScrollContainer, newFrag, "SgListView").commit();
    } else {
        ft.add(R.id.singlePaneStudyGuide, newFrag, "SgListView").commit();

    }
于 2013-02-19T16:30:27.243 に答える