2013-08-08 2 views
3

У меня есть 2 действия, у которых есть вторая активность, возвращающая текстовые входы от пользователя и соответственно изменяющие текстовые поля. Однако, когда я передаю текстовые входы от второго действия, они возвращаются как пустые.Возвращая строки к предыдущему действию usint intents

метод OnClick Вторым мероприятием, который возвращается к основной деятельности:

public void onClick(View v) 
     { 
      Intent i = new Intent(); 
      EditText txt1 = (EditText)findViewById(R.id.txt_name); 
      i.putExtra("str3", txt1.getText()); 

      EditText txt2 = (EditText)findViewById(R.id.txt_address); 
      i.putExtra("str4", txt2.getText()); 

      setResult(RESULT_OK, i); 
      finish(); 
     } 
    }); 
} 

Метод, который вызывается после второй активности заканчивается

public void onActivityResult(int requestCode,int resultCode, Intent data) 
{ 
    TextView txt = (TextView)findViewById(R.id.txt_one); 
    txt.setText(getIntent().getStringExtra("str3")); 
} 
+2

'txt.setText (getIntent() getStringExtra ("str3").);' Вместо этого использовать 'txt.setText (data.getStringExtra ("str3"));' – user370305

+0

В том же типе вы помещаете 'Spannable' в намерениях, но вы читаете их как Strings. Измените их на: 'i.putExtra (" str3 ", txt1.getText(). ToString());' – gunar

+0

ответ уже написан на другом посту. Вы не можете найти findViewById внутри метода onClick. проверьте здесь ответ -> http://stackoverflow.com/a/1974538/2074990 – bofredo

ответ

2

Попробуйте ниже

public void onActivityResult(int requestCode,int resultCode, Intent data) 
{ 
txt.setText(getIntent().getStringExtra("str3")); 
} 

также переместить все инициализацию в onCreate.

TextView txt ; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    txt = (TextView)findViewById(R.id.txt_one); 
    ... // rest of the code 
} 

То же самое для ваших edittext. Объявить в качестве членов класса и инициализировать в onCreate Нет необходимости инициализировать его каждый раз на кнопку мыши

Edit:

использовать Также ниже

public Editable getText()

Добавлено в уровне API 1

Return текст, отображаемый TextView. Если был вызван метод setText() с аргументом BufferType.SPANNABLE или BufferType.EDITABLE, вы можете присвоить возвращаемое значение из этого метода Spannable или Editable соответственно. Примечание. Содержимое возвращаемого значения не должно изменяться. Если вы хотите модифицировать, сначала вы должны сделать свою собственную копию.

http://developer.android.com/reference/android/widget/EditText.html

String value1 = txt1.getText().toString(); 
    i.putExtra("str3", value1); 
+0

@Tarsem почему? – Raghunandan

+0

@Tarsem http://developer.android.com/reference/android/widget/EditText.html – Raghunandan

+0

да, вы были правы :) спасибо –

0

1.

использование i.putExtra("str4", txt2.getText().toString());

и i.putExtra("str3", txt1.getText().toString());

2. использование Intent data принимаемой в onActivityResult()вместоgetIntent()

public void onActivityResult(int requestCode,int resultCode, Intent data) 
{ 
    TextView txt = (TextView)findViewById(R.id.txt_one); 
    txt.setText(data.getStringExtra("str3")); 
} 
0
public void onActivityResult(int requestCode,int resultCode, Intent data) 
{ 
TextView txt = (TextView)findViewById(R.id.txt_one); 
txt.setText(getIntent().getStringExtra("str3")); 
} 

Вместо этого использовать следующий код

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == YourRequestCode) { 
     if (resultCode == YourResultCode) { 

         TextView txt = (TextView)findViewById(R.id.txt_one); 
         txt.setText(data.getStringExtra("str3")); 

     } 
    } 
} 
Смежные вопросы