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