在左侧添加一个片段

时间:2012-07-23 18:15:24

标签: android view fragment

当用户按下按钮时,我希望片段B显示在左侧,如下所示:

enter image description here

现在我的代码就是这样做的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >

<ViewGroup
    android:id="@+id/leftContainer"
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:background="#ffff0000" />

<ViewGroup
    android:id="@+id/rightContainer"
    android:layout_width="0dp"
    android:layout_height="fill_parent"
    android:layout_weight="2"
    android:background="#ff00ffff" />

</LinearLayout> 

android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.leftContainer, fragmentA);
ft.add(R.id.rightContainer, fragmentB);
ft.commit();

不幸的是,所有这一切都给了我一个黑屏。我甚至没有看到碎片的背景颜色。

3 个答案:

答案 0 :(得分:1)

你可以在添加B和A的情况下开始布局,但是将B的可见性设置为“GONE”吗?然后,当您想要显示B时,请更改其可见性。

如果我这样做,我会将它们都放在LinearLayout中。我将B的宽度设置为0dp,将layout_weight设置为1.我将A的宽度设置为0dp,将layout_weight设置为2.当B消失时,A将填充整个布局,当B出现时,您将得到一个布局1/3 B和2/3 A。

ETA:这是一些代码:

RES /布局/ main.xml中:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/topLevel"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="150dp"
    >
  <TextView  
      android:id="@+id/B"
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:layout_height="fill_parent" 
      android:text="B"
      android:background="#f00"
      android:textSize="36sp"
      android:gravity="center"
      android:visibility="gone"
      />
  <TextView  
      android:id="@+id/A"
      android:layout_width="0dp" 
      android:layout_weight="2" 
      android:layout_height="fill_parent" 
      android:text="A"
      android:background="#00f"
      android:textSize="36sp"
      android:gravity="center"
      />
</LinearLayout>

FooApp.java:

package org.efalk.fooapp;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class FooApp extends Activity implements View.OnClickListener {
    private TextView A, B;
    boolean gone = true;

    @Override
    public void onCreate(Bundle savedState)
    {
        super.onCreate(savedState);
        setContentView(R.layout.main);
        A = (TextView)findViewById(R.id.A);
        B = (TextView)findViewById(R.id.B);
        A.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        gone = !gone;
        B.setVisibility(gone ? View.GONE : View.VISIBLE);
    }
}

答案 1 :(得分:0)

您需要以xml或其他方式创建布局,以用作这些片段的容器。然后只需在片段事务中添加片段A.然后,您的布局中将有一些viewgroup可以添加片段A,您需要指定要在事务中添加片段的视图组。此外,您需要确保在事务上调用commit以使更改生效。如果您正在寻找一些不错的过渡等,那么您需要更多地思考如何构建布局以及添加片段的逻辑等。

答案 2 :(得分:0)

答案是:

add B
add A
call ft.hide(B);

然后在需要时:

call ft.show(B);