java - android中随机 fragment 的问题

标签 java android random fragment

我有一个应显示随机 fragment 的 Activity 。

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import java.util.Random;
import android.support.v4.app.*;

public class RandomActivity extends FragmentActivity {

private Random1 random1;
private Random2 random2;
private Random3 random3;
private Random4 random4;
private Random5 random5;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_random);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

    initUI();
}

private void initUI() {
    FragmentTransaction = getSupportFragmentManager().openTransaction();
    setRandomFragment();
}

private void setRandomFragment() {
    Random random = new Random();
    int randomFragmentNum = random.nextInt(250);
    if (randomFragmentNum < 50) {
        randomFragmentNum = 0;
    } else if (randomFragmentNum >= 50 && randomFragmentNum < 100) {
        randomFragmentNum = 1;
    } else if (randomFragmentNum >= 100 && randomFragmentNum < 150) {
        randomFragmentNum = 2;
    } else if (randomFragmentNum >= 150 && randomFragmentNum < 200) {
        randomFragmentNum = 3;
    } else if (randomFragmentNum >= 200 && randomFragmentNum <= 250) {
        randomFragmentNum = 4;
    }

    switch (randomFragmentNum) {
        case 0: {
            random1 = new Random1();
            FragmentTransaction.add(R.id.frag_rand_home, random1);
            FragmentTransaction.commit()
            break;
        }
        case 1: {
            random2 = new Random2();
            FragmentTransaction.add(R.id.frag_rand_home, random2);
            FragmentTransaction.commit()
            break;
        }
        case 2: {
            random3 = new Random3();
            FragmentTransaction.add(R.id.frag_rand_home, random3);
            FragmentTransaction.commit()
            break;
        }
        case 3: {
            random4 = new Random4();
            FragmentTransaction.add(R.id.frag_rand_home, random4);
            FragmentTransaction.commit()
            break;
        }
        case 4: {
            random5 = new Random5();
            FragmentTransaction.add(R.id.frag_rand_home, random5);
            FragmentTransaction.commit()
            break;
        }
    }
}
}

这就是我的代码,但我仍然遇到一些错误:-(

此处错误编号 1:

private void initUI() {
    FragmentTransaction = getSupportFragmentManager().openTransaction();
    setRandomFragment();
}

Expression expected | FragmentManager.openTransaction can only be called from within the same library group (groupId=com.android.support). This API has been flagged with a restriction that has not been met. Examples of API restrictions: * Method can only be invoked by a subclass * Method can only be accessed from within the same library (defined by the Gradle library group id) .* Method can only be accessed from tests. . You can add your own API restrictions with the @RestrictTo annotation.

此处错误编号 2(在情况 0、1、2、3、4 上相同):

case 0: {
            random1 = new Random1();
            FragmentTransaction.add(R.id.frag_rand_home, random1);
            FragmentTransaction.commit()
            break;
        }

Non-static method 'add(int, android.support.v4.app.Fragment)' cannot be referenced from a static context. | Non-static method 'commit()' cannot be referenced from a static context.

几个小时以来我一直在解决这两个错误,但我仍然不知道如何修复它们。

如果有人能帮我解决我的问题就太好了... 此致 杰里米

最佳答案

您需要创建一个 averrable 实例,而不是将其与 class as 一起使用

FragmentTransaction fm = getSupportFragmentManager().beginTransaction();

因为你想在其他方法中使用它所以

private FragmentTransaction fm;
private void initUI() {
    FragmentTransaction fm = getSupportFragmentManager().beginTransaction();
    setRandomFragment();
}

稍后

case 0: {
        random1 = new Random1();
        fm(R.id.frag_rand_home, random1);
        fm()
        break;
    }

注意:openTransaction() 应该是 beginTransaction() 并且您必须在加载另一个 fragment 之前获取一个新的事务实例并且还使用 replace 第二次及以后更改 fragment

FragmentManager.openTransaction can only be called from within the same library group (groupId=com.android.support)

来自source code opentransaction 已被弃用,因此不再使用,甚至在文档中也没有,但在内部它确实调用了 beginTranscation 并且它还应用了 @hide 注释所以看起来像你正在使用一些旧的 android 平台来构建你的应用程序

引用:

What exactly does Android's @hide annotation do?

Difference between add(), replace(), and addToBackStack()

关于java - android中随机 fragment 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49926291/

相关文章:

c++ - 使用 rand() 在 C++ 中进行线性分布

c++ - 如何获得 std::uniform_int_distribution 的实现不可知版本?

java - Andengine视差背景

android - Flutter Firebase 身份验证与 Google 应用程序崩溃

java - 如何从 keyevent 方法调用文本字段变量?

android - 使用 res 文件夹中的可绘制图像创建图库

android - java.lang.reflect.InvocationTargetException 在进行应用更新时

random - 如何从非常庞大的数据集中获得无偏随机样本?

java - 如何提前加载Swing和AWT组件?

java - spring boot无法在mysql数据库中生成表