旋转设备时如何更改片段位置

时间:2016-10-13 02:05:26

标签: android android-layout fragment

我想从布局1更改为布局2,旋转后仍保留内容。有人可以告诉我该怎么做吗?

来自:https://www.dropbox.com/sc/y2nyrzard859hf2/AAD0qVjWoLzKcnQV9a4FTQi_a

到此:https://www.dropbox.com/sc/29hhlbfm31cfs0j/AADCWsFNzD7DKHx4q9i2FlbDa

这是我的代码,但似乎没有用

if(config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        setContentView(R.layout.activity_create_bill3);

    }
    else {
        setContentView(R.layout.activity_create_bill2);
    }

    if(fragmentManager.findFragmentByTag("fragment_product")==null) {
        fragment_product = new Fragment_Product();
        fragmentTransaction.replace(R.id.fragment_product,fragment_product,"fragment_product");

    }
    else
        fragmentTransaction.replace(R.id.fragment_product,fragmentManager.findFragmentByTag("fragment_product"));


    if(fragmentManager.findFragmentByTag("fragment_product_chosen")==null) {
        fragment_product_chosen = new Fragment_Product_Chosen();
        fragmentTransaction.replace(R.id.fragment_product_chosen,fragment_product_chosen,"fragment_product_chosen");

    }
    else
        fragmentTransaction.replace(R.id.fragment_product_chosen,fragmentManager.findFragmentByTag("fragment_product_chosen"),"fragment_product_chosen");


    fragmentTransaction.commit();

我使用2个不同的布局,它有相同的视图,但一个在水平,另一个在垂直,旋转时,fragment_product仍保留内容,但fragment_product_chosen消失。

2 个答案:

答案 0 :(得分:1)

你应该有3个clases:

  1. FragmentMain
  2. FragmentSide
  3. MainActivity
  4. click here to see your layout folder

    您的MainActivity类中的代码:

    public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    

    }

    FragmentMain类中的代码:

    public class FragmentMain extends Fragment{
    
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_main, container, false);
    }
    

    }

    FragmentSide类中的代码:

    public class FragmentSide extends Fragment {
    
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_side, container, false);
    }
    

    }

    然后在您的activity_main.xml中:

    <fragment
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/fragment_main"
        android:layout_marginTop="230dp"
        class="au.com.example.multi_fragments.FragmentMain" />
    
    <fragment
        android:layout_width="match_parent"
        android:layout_height="220dp"
        android:id="@+id/fragment_side"
        class="au.com.example.multi_fragments.FragmentSide" />
        />
    

    在您的activity_main.xml(land)中使用相同的方式:

    <fragment
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="250dp"
        android:id="@+id/fragment_main"
        class="au.com.example.multi_fragments.FragmentMain" />
    
    <fragment
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:id="@+id/fragment_side"
        class="au.com.example.multi_fragments.FragmentSide" />
    
    你的fragment_main.xml中的

    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="View 2"
    android:textSize="20sp"
    android:padding="20dp"
    android:textStyle="bold"
    android:id="@+id/textViewMain" />
    

    在你的fragment_side.xml中:

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="View 1"
        android:textSize="20sp"
        android:padding="20dp"
        android:textStyle="bold"
        android:id="@+id/textViewMain" />
    

    Click here to see the output

    我希望这个解决方案是你想要的。祝你好运:)

答案 1 :(得分:0)

要为横向和纵向模式设置不同的布局,请在res文件夹下创建两个文件夹:layoutlayout-land。所有XML文件在两个文件夹中都应具有相同的名称。有关详细信息,请阅读Designing for Multiple Screens。尽管本文针对不同的屏幕尺寸,但这些技术也适用于不同的设备方向。

至于保存和恢复数据,这与在没有方向更改的情况下销毁活动相同。