Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在主/细节中保留片段状态的合适方法是什么?_Android_Android Fragments - Fatal编程技术网

Android 在主/细节中保留片段状态的合适方法是什么?

Android 在主/细节中保留片段状态的合适方法是什么?,android,android-fragments,Android,Android Fragments,碎片被添加到后堆栈中。若FragmentOne以纵向显示,且屏幕旋转到横向模式,则fragmentTwo将显示。然后,若屏幕再次旋转,fragmentOne将在纵向模式下重新显示(显示为新片段?)。解决这个问题最有效的方法是什么 public class MainActivity extends AppCompatActivity implements MasterFragment.OnMasterSelectedListener { FragmentOne mFragmentOne; Fra

碎片被添加到后堆栈中。若FragmentOne以纵向显示,且屏幕旋转到横向模式,则fragmentTwo将显示。然后,若屏幕再次旋转,fragmentOne将在纵向模式下重新显示(显示为新片段?)。解决这个问题最有效的方法是什么

public class MainActivity extends AppCompatActivity implements MasterFragment.OnMasterSelectedListener {

FragmentOne mFragmentOne;
Fragmenttwo mFragmentTwo;

Boolean dualPane;

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

    mFragmentOne = new FragmentOne();
    mFragmentTwo = new Fragmenttwo();


    MasterFragment masterFragment;
    FrameLayout frameLayout = (FrameLayout)findViewById(R.id.frameLayout);
    FrameLayout frameLayoutDetail = (FrameLayout)findViewById(R.id.frameLayoutDetail);

    if (frameLayout !=null ) {
        dualPane= false;
        Toast.makeText(getApplicationContext(), "single Pane ",
                Toast.LENGTH_LONG).show();

        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        masterFragment=(MasterFragment)getSupportFragmentManager().findFragmentByTag("MASTER");
        if (masterFragment==null) {
            masterFragment = new MasterFragment();
            fragmentTransaction.replace(R.id.frameLayout, masterFragment,"MASTER");
        }
        fragmentTransaction.commit();
    }else {
        if (frameLayoutDetail !=null) {
            dualPane = true;

            Toast.makeText(getApplicationContext(), "dual Pane ",
                    Toast.LENGTH_LONG).show();

            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            masterFragment=(MasterFragment)getSupportFragmentManager().findFragmentById(R.id.frameLayoutMaster);
            if (masterFragment==null) {
                masterFragment = new MasterFragment();
                fragmentTransaction.replace(R.id.frameLayoutMaster, masterFragment);
            }
            fragmentTransaction.commit();

        }
    }

}

@Override
public void onItemSelected(int position) {

    if (!dualPane) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        switch (position) {
            case 0:
                Toast toast = Toast.makeText(getApplicationContext(), "you clicked 0", Toast.LENGTH_SHORT);
                toast.show();

                fragmentTransaction.replace(R.id.frameLayout, mFragmentOne)
                        .addToBackStack(null);
                        //.commit();
                break;
            case 1:
                Toast toast1 = Toast.makeText(getApplicationContext(), "you clicked 1", Toast.LENGTH_SHORT);
                toast1.show();
                fragmentTransaction.replace(R.id.frameLayout, mFragmentTwo)
                        .addToBackStack(null);
                //.commit();
                break;
        }
        fragmentTransaction.commit();
    }else {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        switch (position) {
            case 0:
                 Toast.makeText(getApplicationContext(), "you clicked 0", Toast.LENGTH_SHORT).show();
                fragmentTransaction.replace(R.id.frameLayoutDetail, mFragmentOne)
                        .addToBackStack(null);
                //.commit();
                break;
            case 1:
                Toast.makeText(getApplicationContext(), "you clicked 1", Toast.LENGTH_SHORT).show();

                fragmentTransaction.replace(R.id.frameLayoutDetail, mFragmentTwo)
                        .addToBackStack(null);
                //.commit();
                break;
        }
        fragmentTransaction.commit();
    }
}
}

主片段:

public class MasterFragment extends ListFragment {

OnMasterSelectedListener mCallback;

public interface OnMasterSelectedListener {
    void onItemSelected(int position);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    String[] numbers = new String[]{"One", "Two"};
    ListAdapter numAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, numbers);
    setListAdapter(numAdapter);
    getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);

    try {
        mCallback = (OnMasterSelectedListener) context;
    } catch (ClassCastException e) {
        throw new ClassCastException(context.toString()
                + " must implement OnMasterSelectedListener");
    }
}

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    mCallback.onItemSelected(position);
    //getListView().setItemChecked(position, true);
}
第二部分:

public class Fragmenttwo extends Fragment {

public Fragmenttwo() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_two, container, false);
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    //setRetainInstance(true);
    // Save the current article selection in case we need to recreate the fragment
    //outState.putInt(ARG_POSITION, mCurrentPosition);
}
}

public class Fragmenttwo extends Fragment {

public Fragmenttwo() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_two, container, false);
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    //setRetainInstance(true);
    // Save the current article selection in case we need to recreate the fragment
    //outState.putInt(ARG_POSITION, mCurrentPosition);
}