Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android中的随机片段问题_Java_Android_Random_Fragment - Fatal编程技术网

Java android中的随机片段问题

Java android中的随机片段问题,java,android,random,fragment,Java,Android,Random,Fragment,我有一个活动应该显示一个随机片段 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 { p

我有一个活动应该显示一个随机片段

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;
        }
    }
}
}
Expression expected | FragmentManager.openTransaction只能从同一库组(groupId=com.android.support)中调用。 此API已标记有未满足的限制。API限制的示例:*方法只能由子类调用*方法只能从同一个库(由Gradle库组id定义)中访问。*方法只能从测试中访问。您可以使用@RestrictTo注释添加自己的API限制

此处为错误编号2(情况0,1,2,3,4相同):

无法从静态上下文引用非静态方法“add(int,android.support.v4.app.Fragment)。|无法从静态上下文引用非静态方法“commit()”

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

如果有人能帮我解决我的问题那就太好了。。。 顺致敬意,
Jeremy

您需要创建一个实例averable,而不是将其与类一起使用

FragmentTransaction fm = getSupportFragmentManager().beginTransaction();
既然你想在其他方法中使用它

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

注意:
openTransaction()
应该是
beginTransaction()
,您必须在加载另一个片段之前获得一个新的事务实例,并使用
replace
第二次或以后更改片段

只能从内部调用FragmentManager.openTransaction 相同的库组(groupId=com.android.support)

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

参考:


非常感谢您的关注和帮助!现在我能为自己找到解决办法了。我认为用更少的代码实现这一点是可能的,但它是有效的

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.*;
import android.support.v4.app.Fragment;

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

    FragmentTransaction fm = getSupportFragmentManager().beginTransaction();

    initUI();
}

private void initUI() {
    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 fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.frag_rand_home, random1, "Home");
            fragmentTransaction.commit();
            break;
        }
        case 1: {
            random2 = new Random2();
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.frag_rand_home, random2, "Home");
            fragmentTransaction.commit();
            break;
        }
        case 2: {
            random3 = new Random3();
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.frag_rand_home, random3, "Home");
            fragmentTransaction.commit();
            break;
        }
        case 3: {
            random4 = new Random4();
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.frag_rand_home, random4, "Home");
            fragmentTransaction.commit();
            break;
        }
        case 4: {
            random5 = new Random5();
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.frag_rand_home, random5, "Home");
            fragmentTransaction.commit();
            break;
        }
    }
}
}
导入android.os.Bundle;
导入android.support.v7.app.AppActivity;
导入android.support.v7.widget.Toolbar;
导入java.util.Random;
导入android.support.v4.app.*;
导入android.support.v4.app.Fragment;
公共类RandomActivity扩展了FragmentActivity{
私人随机化1随机化1;
私人随机2随机2;
私人随机3随机3;
私人随机4随机4;
私人随机5随机5;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_random);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
FragmentTransaction fm=getSupportFragmentManager().beginTransaction();
initUI();
}
私有void initUI(){
setRandomFragment();
}
私有void setRandomFragment(){
随机=新随机();
int randomFragmentNum=random.nextInt(250);
if(randomFragmentNum<50){
randomFragmentNum=0;
}否则如果(randomFragmentNum>=50&&randomFragmentNum<100){
randomFragmentNum=1;
}否则如果(randomFragmentNum>=100&&randomFragmentNum<150){
randomFragmentNum=2;
}否则如果(randomFragmentNum>=150&&randomFragmentNum<200){
randomFragmentNum=3;

}否则,如果(randomFragmentNum>=200&&randomFragmentNum,我建议您学习数组和
列表
。当您开始以数字结尾命名变量时,您应该考虑其他可能的解决方案。使用数组,您可以减少
setRandomFragment()
到两行代码。你也应该只做
int randomFragmentNum=random.nextInt(5);
那么你就不需要
if…else
链了。
FragmentTransaction=getSupportFragmentManager().openTransaction();
这一行没有意义。就像
String=“hello”;
仍然存在FragmentManager.openTransaction只能从同一个库组中调用(groupId=com.android.support)…@JeremyBrehe我找不到
openTransaction
的文档,所以我不知道它是什么,
openTransaction
已被弃用,因此不再使用,甚至在文档中也没有,但在内部它确实调用
BeginTransaction
,而且它还与@hide注释一起应用,看起来很像yo你正在使用一些旧的android平台来构建你的应用程序
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;
    }
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.*;
import android.support.v4.app.Fragment;

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

    FragmentTransaction fm = getSupportFragmentManager().beginTransaction();

    initUI();
}

private void initUI() {
    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 fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.frag_rand_home, random1, "Home");
            fragmentTransaction.commit();
            break;
        }
        case 1: {
            random2 = new Random2();
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.frag_rand_home, random2, "Home");
            fragmentTransaction.commit();
            break;
        }
        case 2: {
            random3 = new Random3();
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.frag_rand_home, random3, "Home");
            fragmentTransaction.commit();
            break;
        }
        case 3: {
            random4 = new Random4();
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.frag_rand_home, random4, "Home");
            fragmentTransaction.commit();
            break;
        }
        case 4: {
            random5 = new Random5();
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.frag_rand_home, random5, "Home");
            fragmentTransaction.commit();
            break;
        }
    }
}
}