我希望在editText1(Activity1)中输入相同的文字到editText2(Activity2)
在Activity1中:
public class Activity1 extends Activity {
editText1 = (EditText) findViewById(R.id.editText1);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.all1);
}
public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()) {
case R.id.settings:
Intent intent = new Intent(Activity1.this, Activity2.class);
intent.putExtra("editTextentered", editText1.getText().toString());
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
在Activity2中:
public class Activity2 extends Activity {
private EditText editText1;
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
editText1 = (EditText) findViewById(R.id.editText2);
setContentView(R.layout.settings);
Bundle extras = getIntent().getExtras();
String editTextentered = null;
if(extras !=null && extras.containsKey("editTextentered")) {
editTextVal= extras.getString("editTextentered");
}
editText1.setText(""+editTextentered);
}
}
我正在尝试调试应用程序,但它崩溃了 我想在editText(EditText2)中设置setText,输入到第一个editText(EditText1),以便理解并解析它,如果需要的话加倍
答案 0 :(得分:1)
您需要切换这两行
editText1 = (EditText) findViewById(R.id.editText2);
setContentView(R.layout.settings);
您的Views
将返回null
,直到您使用layout
夸大了setContentView()
。因此,onCreate()
应该更像
super.onCreate(savedInstanceState);
setContentView(R.layout.settings); // this needs to be called before instantiating any Views
editText1 = (EditText) findViewById(R.id.editText2);
Bundle extras = getIntent().getExtras();
另外,您需要实际获取extra
中传递的Activity2
的值,而null
是String editTextentered = null;
的{{1}}。改变这个
String editTextentered = extras.getStringExtra("editTextentered");
到
{{1}}
当你的应用程序崩溃时,logcat中总会显示一个原因。您应该使用它来帮助您进行调试,如果您无法弄清楚,请在此处将您的问题发布到此处,以便我们更容易提供帮助。
答案 1 :(得分:1)
在设置布局之前,如果您正在获取编辑文本的ID,那么Null指针就会崩溃 使用以下代码更改代码并运行它将起作用 在您的活动中1执行以下操作
public class Activity1 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.all1);
editText1 = (EditText) findViewById(R.id.editText1);
}
并在您的第二个活动中执行以下操作
public class Activity2 extends Activity {
private EditText editText1;
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
Bundle extras = getIntent().getExtras();
String editTextentered = null;
editText1 = (EditText) findViewById(R.id.editText2);
if(extras !=null && extras.containsKey("editTextentered"))
{
editTextVal= extras.getString("editTextentered");
}
editText1.setText(""+editTextentered);
}
}
答案 2 :(得分:1)
在您的活动1中,您正在初始化onCreate
之外的观看次数。你会得到NUllPointerException
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.all1);
editText1 = (EditText) findViewById(R.id.editText1);
同样在活动2中
setContentView(R.layout.settings); // must come first
editText1 = (EditText) findViewById(R.id.editText2);
Bundle extras = getIntent().getExtras();
if(extras !=null )
{
String editTextVal= extras.getString("editTextentered");
editText1.setText(editTextVal);
}
您可以findViewById
设置为活动的当前视图层次结构。因此,您需要先将内容设置为活动,然后初始化视图。
答案 3 :(得分:1)
试试这个;
Activity1.java
Intent intent = new Intent(Activity1.this, Activity2.class);
intent.putExtra("editTextentered", editText1.getText().toString());
startActivity(intent);
finish();
Activity2.java
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
editText1 = (EditText) findViewById(R.id.editText2);
String edittextValue = getIntent().getExtras().getString("editTextentered");
editText1.setText(""+edittextValue);
}
答案 4 :(得分:0)
您永远不会在第二个活动中为变量editTextentered赋值。将行editTextVal= extras.getString("editTextentered");
替换为editTextentered= extras.getString("editTextentered");
,然后在editText1.setText(""+editTextentered);
行附近添加以下代码:
if(editTextentered != null) {
editText1.setText(""+editTextentered);
}