1

editText1(Activity1)からeditText2(Activity2)に同じテキストを入力したい

アクティビティ 1 で:

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);

        }
    }
}

アクティビティ 2 で:

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(EditText1) に入力された editText(EditText2) で setText を理解し、必要に応じて double に解析する必要があります。

4

5 に答える 5

1

これらの2行を切り替える必要があります

editText1 = (EditText) findViewById(R.id.editText2);
setContentView(R.layout.settings);

と同じように膨らませるまで、あなたViewsは戻ってきます。だからあなたはもっと似ているはずですnulllayoutsetContentView()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;

String editTextentered = extras.getStringExtra("editTextentered");

アプリがクラッシュすると、常に logcat に理由が表示されます。デバッグに役立てるためにそれを使用する必要があります。それがわからない場合は、質問とともにここに投稿してください。サポートが容易になります。

于 2013-08-26T13:15:42.600 に答える
1

レイアウトを設定する前に編集テキストの ID を取得しているため、Null ポインター expetion でクラッシュします 次のようにコードを変更して実行すると、アクティビティで動作します 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);



    }

2番目のアクティビティでは、次のことを行います

  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);
}

}
于 2013-08-26T13:15:50.150 に答える
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現在のビュー階層をアクティビティに設定できます。したがって、最初にコンテンツをアクティビティに設定してから、ビューを初期化する必要があります。

于 2013-08-26T13:16:06.667 に答える
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);
}
于 2013-08-26T13:18:47.083 に答える
0

2 番目のアクティビティで変数 editTextentered に値を指定することはありません。editTextVal= extras.getString("editTextentered");行を に置き換えてeditTextentered= extras.getString("editTextentered");から、行の周りに次のコードを追加しますeditText1.setText(""+editTextentered);

if(editTextentered != null) {
    editText1.setText(""+editTextentered);
}
于 2013-08-26T13:17:42.140 に答える