将文本从activity1设置为activity2

时间:2013-08-26 13:12:09

标签: android android-activity android-edittext

我希望在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),以便理解并解析它,如果需要的话加倍

5 个答案:

答案 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的值,而nullString 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);
}