我试图通过意图将整数(从edittext)传递到另一个活动。 当用户单击一个按钮时,edittext中的文本将转换为字符串然后转换为int,然后int将通过intent发送到另一个活动,但之后我必须使用int。
此处发送意图的活动:
public class HomeActivityPro extends ActionBarActivity {
private InterstitialAd interstitial;
EditText conttext = (EditText) findViewById ( R.id.texthome );
Button buttone = (Button) findViewById(R.id.buttone);
String maxom = conttext.getText().toString();
int maxam = Integer.parseInt(maxom);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_home);
View.OnClickListener maxim = new View.OnClickListener() {
@Override
public void onClick (View view) {
Intent wall = new Intent(HomeActivityPro.this, GuessOne.class);
wall.putExtra("maxPressed", maxam);
startActivity(wall);
}
};
buttone.setOnClickListener(maxim);
接收它的活动:
public class GuessOne extends ActionBarActivity {
int randone;
int contone;
int wall = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_guess_one);
wall = getIntent().getIntExtra("maxPressed", -1);
randone = (int) (Math.random()*10+1);
contone = 0;
}
我在这里使用它:
public void guessone (View view){
contone++;
textcontone.setText(getString(R.string.attempts) + "" + contone);
if (contone >= wall ){
resultaone.setText("You Failed" + " " + wall);
Toast.makeText(this, "You Failed", Toast.LENGTH_LONG).show();
}
当我使用app时,int的值始终为-1。哪里我错了。
答案 0 :(得分:2)
如果不将xml设置为活动,则无法使用findViewById
。这意味着只有在调用findViewById
后才需要使用setContentView
方法。
此外,您需要在单击按钮后读取EditText文本值,否则它将始终为null / empty。
这样做
public class HomeActivityPro extends ActionBarActivity {
private InterstitialAd interstitial;
EditText conttext;
Button buttone;
String maxom;
int maxam = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_home);
conttext = (EditText) findViewById ( R.id.texthome );
buttone = (Button) findViewById(R.id.buttone);
View.OnClickListener maxim = new View.OnClickListener() {
@Override
public void onClick (View view) {
maxom = conttext.getText().toString();
maxam = Integer.parseInt(maxom);
Intent wall = new Intent(HomeActivityPro.this, GuessOne.class);
wall.putExtra("maxPressed", maxam);
startActivity(wall);
}
};
buttone.setOnClickListener(maxim);
答案 1 :(得分:2)
问题1
将其放入点击监听器中:
String maxom = conttext.getText().toString();
int maxam = Integer.parseInt(maxom);
您想要在单击按钮时读取值而不是在打开活动时读取,是否正确?
问题2
以下内容需要在setContentView
中onCreate
之后:
conttext = (EditText) findViewById ( R.id.texthome );
buttone = (Button) findViewById(R.id.buttone);
将声明保留在原来的位置。只是声明:
EditText conttext;
Button buttone;
注意强>
在所有活动中遵循相同的模式。将视图声明为字段变量,在onCreate
之后在setContentLayout
中分配它们。在他们需要的时候获取价值。
答案 2 :(得分:1)
public int getIntExtra(String name,int defaultValue)
在API级别1中添加从意图中检索扩展数据。
参数name所需项目的名称。 defaultValue该值 如果没有存储所需类型的值,则返回 给定的名称。返回先前添加的项的值 putExtra()或默认值(如果未找到)。也可以看看 putExtra(String,int)
这意味着当您调用getIntExtra(valueName, defaultValue);
时未找到任何int,因此选择了默认值。
在致电新活动之前,您应该检查maxam
值是什么。
答案 3 :(得分:0)
在您收到的活动中:
wall = getIntent().getIntExtra("maxPressed");
答案 4 :(得分:0)
求助:通过getInt和String.valueOf
private static final String IMGID = "ImgID";
if (getIntent().getExtras().containsKey(IMGID)) {
//Picasso.with(this).load(getIntent().getExtras().getString(IMG)).into(mImg);
Picasso.with(this).load(getIntent().getExtras().getInt(String.valueOf(IMGID))).into(mImg);
}