Pada suatu use case tertentu bisa saja kita menginginkan aplikasi Android yang kita kembangkan bisa melakukan pengiriman nilai dari satu Activity ke Activity lainnya. Hal ini sangat mudah dicapai dengan adanya Intent pada API Android. Pada tulisan ini saya akan menunjukkan bagaimana cara mengirim suatu nilai atau suatu variabel dari satu Activity ke Activity yang lain.
Artikel ini sangat berkaitan dengan artikel-artikel terdahulu yaitu
– Mengenai Intent dan navigasi antar Activity dapat dibaca di Android Activity – Navigating
– Mengenai ListView silahkan baca di Android Menampilkan Data pada ListView
– dan tentang Android Menambahkan Aksi Klik pada ListView Item
Layout
Kita akan membuat 2 buah Activity oleh karena itu kita perlu membuat 2 buah layout. Berikut adalah masing-masing layout xml-nya
file : activity_list.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".ListActivity" > <ListView android:id="@+id/listViewProgramming" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" > </ListView> </RelativeLayout> |
file : activity_item.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".ItemActivity" > <TextView android:id="@+id/itemTextView" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </RelativeLayout> |
Sedikit penjelasan, layout pertama digunakan untuk menampilkan daftar berupa bahasa pemrograman populer sedangkan layout kedua digunakan untuk menampilkan pesan serta bahasa pemrograman yang diklik pada layout pertama.
Activity
Sekarang kita tulis kode pada kedua Activity agar sesuai dengan keinginan kita. Berikut adalah Activity yang menampilkan daftar bahasa pemrograman populer.
file : ListActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
package com.agungsetiawan.listviewapp; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; public class ListActivity extends Activity implements OnItemClickListener{ private ListView listView; private ArrayAdapter<String> arrayAdapter; private String[] programmingLang={ "Java","C","C++","C#","Visual Basic","Ruby","Python","PHP","Lisp" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list); listView=(ListView) findViewById(R.id.listViewProgramming); arrayAdapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,programmingLang); listView.setAdapter(arrayAdapter); listView.setOnItemClickListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.list, menu); return true; } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String message="Terpilih : "+((TextView)view).getText(); Intent intent=new Intent(getApplicationContext(),ItemActivity.class); intent.putExtra("message", message); startActivity(intent); } } |
Perhatikan pada baris yang saya tandai. Disitu kita membuat sebuah objek dari kelas Intent kemudian yang menjadi kunci dari mengirim suatu nilai dari satu Activity ke Activity yang lain adalah method putExtra yang dimiliki oleh objek Intent.
Pada method tersebut kita meletakkan sebuah variabel dengan nama message yang berisi pesan “Terpilih . . .” dengan sebuah kunci yang bernama “message”. Kunci ini sangat penting karena akan kita gunakan nanti untuk mengambil pesan yang tersimpan.
Selanjutya kita buat Activity untuk menampilkan item yang terpilih. Berikut adalah kodenya
file : ItemActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
package com.agungsetiawan.listviewapp; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.widget.TextView; public class ItemActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_item); TextView textView=(TextView) findViewById(R.id.itemTextView); Intent intent=getIntent(); textView.setText(intent.getStringExtra("message")); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.item, menu); return true; } } |
Perhatikan lagi baris yang saya tandai. Kalau tadi kita menyimpan variabel untuk dilempar menggunakan putExtra sekarang untuk mengmabilnya kita menggunakan method getStringExtra karena variabel yang disimpan memiliki tipe data string. Semudah itulah mengirim nilai atau variabel ke Activity yang lain.
Running dan Screenshot
Jangan kecewa jika hasilnya sangat sederhana karena namanya juga baru tahap belajar dan sebenarnya kita sudah mendapatkan sebuah ilmu bari mengenai mengirim nilai ke Activity lain 😀
Pak, mau tanya…
Di ItemActivity.java file di bagian “R.menu.item, menu”, “item” itu merujuk ke mana? apakah judul string array?
Terima kasih
terima kasih atas ilmunya. sangat bermanfaat
Cara kirim data antar aktivity lebih dari 1 data dan tipe datanya INT gimana ya ?
Bang ada tutorial multiselect listview dengan data base mysql
Saya menerapkan seperti yang dijelaskan dlm tutorial ini, dan berhasil, tp ketika saya mencoba untuk hal berbeda, dimana data listviewnya diambil dari server, saya kesulitan, mohon bantuannya mas, saya sangat berterimakasih sekali atas tutorial ini dan bantuannya, kode yang saya terapkan seperti ini:
public class MainBdrTujuanActivity extends AppCompatActivity {
ListView SubjectListView;
ProgressBar progressBarSubject;
String ServerURL = “http://testlistview.000webhostapp.com/subject_bdr_tujuan.php”;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_bdr_asal);
SubjectListView = (ListView) findViewById(R.id.listview1);
progressBarSubject = (ProgressBar) findViewById(R.id.progressBar);
new GetHttpResponse(MainBdrTujuanActivity.this).execute();
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_2, android.R.id.text1, adapter);
SubjectListView.setAdapter(adapter);
// ListView on item selected listener.
SubjectListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
// TODO Auto-generated method stub
// Getting listview click value into String variable.
String TempListViewClickedValue = adapter[position].toString();
Intent intent = new Intent(MainBdrTujuanActivity.this, CekOngkirActivity.class);
// Sending value to another activity using intent.
intent.putExtra(“ListViewClickedValue”, TempListViewClickedValue);
startActivity(intent);
}
});
}