我正在尝试使用片段在我的应用程序中多次实例化,但我不能创建比第一个更多的片段;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>