2013-11-24 5 views
7

Это может показаться простым, но я не могу заставить его работать. У меня есть два вида деятельности. Первая из них представляет собой форму, а вторая показывает данные из файла JSON на основе значений, введенных в первом действии.Как перенести данные из одной активности в другую в android

Так что я пытаюсь сделать простую версию. У меня есть EditText и кнопка, поэтому, когда они нажимают кнопку, все, что было в EditText, будет в TextView следующего действия.

Вот мой код до сих пор: Основная деятельность

static TextView textView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    textView = (TextView) findViewById(R.id.editText1); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 
public void transferIT(View view){ 
    Intent intent = new Intent(this, Page.class); 
    startActivity(intent); 
} 

public static String getText(){ 
    String data = (String) textView.getText(); 
    return data; 
} 

Главная XML

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignTop="@+id/textView1" 
    android:layout_centerHorizontal="true" 
    android:ems="10" 
    android:hint="Enter Text to transfer" /> 

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:text="Transfer it" 
    android:onClick="transferIT" /> 

Вторая активность

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_page); 
    // Show the Up button in the action bar. 
    setupActionBar(); 


    TextView enteredValue = (TextView)findViewById(R.id.text); 

    enteredValue.setText(MainActivity.getText()); 

} 

Второй XML

<TextView 
    android:id="@+id/text" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="58dp" /> 

Таким образом, я сделал метод для данных EditText и в другой деятельности, я называю его, чтобы получить к нему доступ. В настоящее время, когда я нажимаю кнопку, она перестает работать. Итак, каково ваше решение для получения данных формы в другой деятельности?

+0

http://stackoverflow.com/questions/768969/passing-a-bundle-on-startactivity –

+0

'editText1' не является' textview' его 'EditText', но у вас есть textView = (TextView) findViewById (R .id.editText1) 'wrong – Raghunandan

+0

@Raghunandan EditText расширяет TextView. Итак, из POV Java это нормально. –

ответ

11

В первом упражнении вы должны поставить дополнительный аргумент намерению, как это:

// I assume Page.class is your second ativity 
Intent intent = new Intent(this, Page.class); 
intent.putExtra("arg", getText()); // getText() SHOULD NOT be static!!! 
startActivity(intent); 

Затем во втором упражнении вы retrive аргумент так:

String passedArg = getIntent().getExtras().getString("arg"); 
enteredValue.setText(passedArg); 

Это также хорошо, чтобы сохранить «Арг» Строка в MainActivity как постоянный и всегда ссылайтесь на него в других местах.

public static final String ARG_FROM_MAIN = "arg"; 
2

Вы отправляете данные в намерении, когда вы вызываете второе действие. Это довольно фундаментальный материал. Я предлагаю вам ознакомиться с концепциями Intents и Parcelable в Android и Serialization на Java, которые связаны с вашим вопросом.

2

Вы должны изменить

static TextView textView; 
textView = (TextView) findViewById(R.id.editText1); 

в

EditText ed1; 
ed1 = (EditText) findViewById(R.id.editText1); 

Coz у вас есть

<EditText 
android:id="@+id/editText1" // it is edittext not textview 

Тогда

public void transferIT(View view){ 
String value = ed1.getText().toString() 
Intent intent = new Intent(this, Page.class); 
intent.putExtra("key",value); 
startActivity(intent); 
} 

Тогда в OnCreate второй активности

String value = getIntent().getExtras().getString("key"); 
1

мы посылаем данные из одного вида деятельности на другой, где первая деятельность mainActivity и другое otherActivity для mainActivity

 `Intent in = new Intent(this, OtherActivity.class); 
     in.putExtra("name", etname.getText().toString()); 
     in.putExtra("job", etjob.getText().toString()); 
     in.putExtra("sal", etsal.getText().toString());  
     startActivity(in);` 

для otherActivity

`Intent in = getIntent(); 
    tv.setText(in.getStringExtra("name")+"\n"+in.getStringExtra("job")+" "+in.getStringExtra("sal")); 

`

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