我有一个应显示随机 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 平台来构建你的应用程序
引用:
关于java - android中随机 fragment 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49926291/