我正在努力弄清楚为什么我不能将int值从一个活动传递到另一个活动。该应用程序将要求您按一个按钮从1-100生成一个随机数,该数字将显示在按钮下方。还有另一个按钮,它将打开一个新活动,只显示已滚动的随机数...但我只是得到0。
我调查了类似的问题,但没有用。
这是我的MainActivity代码
public class MainActivity extends ActionBarActivity {
int n;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void ButtonRoll(View view) {
TextView textRoll = (TextView) findViewById(R.id.textview_roll);
Random rand = new Random();
n = rand.nextInt(100) + 1;
String roll = String.valueOf(n);
textRoll.setText("Random number is " + roll);
}
public void OpenStats(View view) {
Intent getStats = new Intent(this, Stats.class);
startActivity(getStats);
}
public int GetNumber (){ return n; }
}
继承我的第二堂课。
public class Stats extends Activity {
MainActivity statistics = new MainActivity();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.stats);
int n = statistics.GetNumber();
TextView tvStats = (TextView) findViewById(R.id.passedNumber_textview);
String number = String.valueOf(n);
tvStats.setText(number);
}
}
在使用活动时,是否使用getter以错误的方式从另一个类获取数据?谢谢你的时间。
答案 0 :(得分:3)
您应该将数据作为额外附加到您的意图中传递。为此,您需要首先确定要使用的全局密钥。您可以在MainActivity中执行类似的操作
public static final String SOME_KEY = "some_key";
然后将您的OpenStats
方法修改为
public void OpenStats(View view) {
Intent getStats = new Intent(this, Stats.class);
getStats.putExtra(SOME_KEY, n);
startActivity(getStats);
}
然后在Stats.class onCreate方法
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.stats);
int n = getIntent().getIntExtra(MainActivity.SOME_KEY, -1);
TextView tvStats = (TextView) findViewById(R.id.passedNumber_textview);
String number = String.valueOf(n);
tvStats.setText(number);
}
你显然应该确保你至少调用一次ButtonRoll,或者你设置了n,这样你就不会传递null int。
另外,作为注释,约定规定方法应使用较低的驼峰大小写格式。也就是说,第一个单词是完全小写的,后续单词的第一个单词是大写。这会改变你的方法
OpenStats() -> openStats()
ButtonRoll() -> buttonRoll()
类/对象是上层驼峰案例,只是为了避免混淆。