无法动态创建Android Fragment的多个实例

时间:2013-10-25 04:35:18

标签: android dynamic android-fragments

我正在尝试使用Fragment片段在我的应用程序中多次实例化,但我创建的不仅仅是第一个;调用FragmentTransaction代码,但我从未在屏幕上显示第二个实例。 (或者可能是第一个被覆盖,即使我正在调用“添加”。)

我听说过ListFragment,如果我无法解决这个问题,我就要试验一下......但为什么我不能创建这个片段的多个实例呢?

这是我在MainActivity.java中修改的内容。 (顺便说一下:这里两次调用addSlotFragment并不是我想要的......我只是打算通过按钮来调用它...但是我想如果我可以让这个简单的例子工作那么我可能会得到我的最终解决方案。)

public class MainActivity extends Activity {

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

    addSlotFragment();
  }


  @TargetApi(Build.VERSION_CODES.HONEYCOMB)
  private void addSlotFragment() {
    System.out.println("adding fragment");
    // add time-slot fragment
    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    TimeSlotFragment fragment = new TimeSlotFragment();
    fragmentTransaction.add(R.id.time_slot_container, fragment);
    fragmentTransaction.commit();
  }
}

...以及我添加到默认activity_main.xml中的文章:

    <LinearLayout 
      androids:id="@+id/time_slot_container"
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal">
    </LinearLayout>

这是超简单的TimeSlotFragment.java:

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class TimeSlotFragment extends Fragment {

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

...和time_slot.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" >

  <EditText
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:singleLine="true"
    android:hint="action"
    >
    <requestFocus />
  </EditText>

  <EditText
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:singleLine="true"
    android:hint="time"
    android:inputType="number"
    />

</LinearLayout>

1 个答案:

答案 0 :(得分:0)

你可以尝试在LinearLayout中放置一个Layout(可能是FrameLayout),因为你要替换完整的contentView导致问题。