0

ユーザーがボタンを押すと、次のようにフラグメント B が左側に表示されるようにします。

ここに画像の説明を入力

これを行うための私のコードは次のとおりです。

<?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();

残念ながら、これで得られるのは黒い画面だけです。フラグメントの背景色もわかりません。

4

3 に答える 3

1

BとAの両方を追加してレイアウトを開始できますが、Bの可視性を「GONE」に設定できますか?次に、Bを表示する場合は、その表示を変更します。

これを行う場合は、両方をLinearLayoutに配置します。Bの幅を0dpに設定し、そのlayout_weightを1に設定します。Aの幅を0dpに設定し、そのlayout_weightを2に設定します。Bがなくなると、Aはレイアウト全体を塗りつぶし、Bが表示されると、次のようなレイアウトになります。 1/3Bおよび2/3A。

ETA:ここにいくつかのコードがあります:

res / layout / 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);
    }
}
于 2012-07-23T19:46:08.333 に答える
0

これらのフラグメントのコンテナーとして機能するには、xmlまたはその他の方法でレイアウトを作成する必要があります。次に、フラグメントトランザクションにフラグメントAを追加するだけです。次に、フラグメントAを追加できるビューグループがレイアウトにあり、トランザクションでフラグメントを追加するビューグループを指定する必要があります。また、変更を有効にするには、トランザクションでcommitを呼び出す必要があります。いくつかの素晴らしいトランジションなどを実行したい場合は、レイアウトの構造化方法やフラグメントを追加するロジックなどについてもう少し考える必要があります。

于 2012-07-23T18:21:16.977 に答える
0

答えは次のとおりです。

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

その後、必要に応じて:

call ft.show(B);
于 2012-07-24T13:26:20.490 に答える