【发布时间】:2018-09-30 06:21:32
【问题描述】:
我有一个应该显示随机片段的活动。
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();
}
表达式预期 | FragmentManager.openTransaction 只能从同一个库组 (groupId=com.android.support) 中调用。 此 API 已被标记为具有尚未满足的限制。 API 限制示例: * 方法只能由子类调用 * 方法只能从同一个库中访问(由 Gradle 库组 ID 定义)。* 方法只能从测试中访问。 .您可以使用 @RestrictTo 注释添加自己的 API 限制。
这里的错误编号为 2(在 case 0、1、2、3、4 上相同):
case 0: {
random1 = new Random1();
FragmentTransaction.add(R.id.frag_rand_home, random1);
FragmentTransaction.commit()
break;
}
不能从静态上下文引用非静态方法“add(int, android.support.v4.app.Fragment)”。 |不能从静态上下文中引用非静态方法“commit()”。
几个小时以来我一直在处理这两个错误,但我仍然不知道如何修复它们。
如果有人能帮助我解决我的问题,那就太好了... 最好的祝福 杰里米
【问题讨论】:
-
我建议你了解数组和
List。当你开始用数字命名变量时,你应该看看其他可能的解决方案。使用数组,您可以将setRandomFragment()减少为两行代码。 -
你也应该只做
int randomFragmentNum = random.nextInt(5);然后你就不需要if...else链。 -
FragmentTransaction = getSupportFragmentManager().openTransaction();这行没有意义。就像String = "hello";
标签: java android random fragment