Android:如何将片段加载到FrameLayout

时间:2017-05-31 18:58:02

标签: java android android-fragments

我从Android开始,在我的项目中我使用此BottomBar。喜欢它,效果很好。我的应用程序的代码与他在教程中使用的代码几乎相同,唯一不同的是我的MainActivityAppCompatActivity延伸。

现在我要做的是在FrameLayout中加载片段:

<!-- This could be your fragment container, or something -->
<FrameLayout
    android:id="@+id/contentContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/bottomBar"
    />

为此,我尝试了这段代码,我发现谷歌搜索我的问题的答案:

// Create new fragment and transaction
QrCodeFragment newFragment = new QrCodeFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack if needed
transaction.replace(R.id.bottomBar, newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit();

transaction.replace(R.id.bottomBar, newFragment);行抱怨newFragment的类型,应该是android.app.Fragment。我的QrCode类:public class QrCodeFragment extends Fragment

当我今天开始使用Android时,如果我做正确的事,我会感到困惑。 如果我真的应该在FrameLayout内加载片段,如果是这样的话,我做错了什么我无法加载。我知道它是我片段的类型,但我不知道如何使用所需类型创建它。我使用Android Studio > New > Fragment > Fragment (Blank)

创建了它

感谢您的帮助

更新: 我在this post找到了我的错误解决方案,但即使没有错误,我仍然无法看到该片段。

3 个答案:

答案 0 :(得分:8)

首先你的Fragment交易行中有一个错误,根据你的布局应该是:

transaction.replace(R.id.contentContainer, newFragment); // not R.id.bottomBar

其次,您应该使用 supportFragmentManager 而不是 fragmentManager 来处理支持片段,因此请执行以下方法:

final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.contentContainer, newFragment);
transaction.addToBackStack(null);
transaction.commit();

答案 1 :(得分:1)


            const Int32 OVERRIED_SERVICE_WINDOWS = 0x00100020;
            const Int32 ENABLE_PRESENT = 0x01000000;
            const Int32 REMOTE_FLAG = 0x00041040;

            try
            {
                DateTime now = DateTime.Now;

                IResultObject novoDeploy = connection.CreateInstance("SMS_Advertisement");

                  novoDeploy["CollectionID"].StringValue = collectionID;
                  novoDeploy["PackageID"].StringValue = pacote;
                  novoDeploy["ProgramName"].StringValue = nomePrograma;
                  novoDeploy["AdvertisementName"].StringValue = "Deploy Teste SDK";
                  novoDeploy["Comment"].StringValue = "Deploy realizado via SDK";
                  novoDeploy["AdvertFlags"].IntegerValue = novoDeploy["AdvertFlags"].IntegerValue | OVERRIED_SERVICE_WINDOWS;
                  novoDeploy["DeviceFlags"].IntegerValue = 0;//novoDeploy["DeviceFlags"].IntegerValue | ENABLE_PRESENT;
                  novoDeploy["RemoteClientFlags"].IntegerValue = novoDeploy["RemoteClientFlags"].IntegerValue | REMOTE_FLAG;
                  novoDeploy["AssignedScheduleEnabled"].BooleanValue = true;
                  novoDeploy["OfferType"].IntegerValue = 0;
                  novoDeploy["PresentTimeEnabled"].BooleanValue = true;
                  novoDeploy["PresentTime"].DateTimeValue = now;
                  novoDeploy["Priority"].IntegerValue = 1;
                  novoDeploy["TimeFlags"].IntegerValue = novoDeploy["TimeFlags"].IntegerValue | ENABLE_PRESENT;

                  List<IResultObject> collectionSchedule = novoDeploy.GetArrayItems("AssignedSchedule");
                  IResultObject collectionVariable = 
 connection.CreateEmbeddedObjectInstance("SMS_ST_NonRecurring");
                  collectionVariable["StartTime"].DateTimeValue = now;
                  collectionSchedule.Add(collectionVariable);
                  novoDeploy.SetArrayItems("AssignedSchedule", collectionSchedule);

                  novoDeploy.Put();

答案 2 :(得分:0)

就我而言,我可以通过使用

解决它
androidx.fragment.app.FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

替换您的

FragmentTransaction