
Terlebih dahulu anda harus mengikuti Tutorial menampilkan data MySQL ke Listview Android. Jika sudah ada project tersebut di komputer anda dan berhasil berjalan dengan sempurna, selanjutnya ikuti langkah-langkah selanjutnya.
Di folder res/menu buat file baru dengan nama activity_main_actions.xml pastekan koding berikut.
activity_main_actions.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Search Widget -->
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
android:showAsAction="ifRoom"
android:actionViewClass="android.widget.SearchView"/>
</menu>
Pada folder res/values ganti kode strings.xml dengan kode berikut.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Listview Andoid</string>
<string name="hello_world">Hello world!</string>
<string name="action_search">Search</string>
</resources>
Pada folder src/namapackage pada MainActivity.java tambahkan koding berikut. public class MainActivity extends ListActivity implements SearchView.OnQueryTextListener {
// Progress Dialog
private ProgressDialog pDialog;
SearchView searchView;
JSONParser jParser = new JSONParser();
ArrayList<HashMap<String, String>> semuaList;
String url_semua = "";
// JSON Node
private static final String TAG_SUCCESS = "success";
private static final String TAG_DATA = "data";
private static final String TAG_MBL = "motor";
private static final String TAG_HRG = "harga";
// pendaftaran JSONArray
JSONArray jmobil = null;
Buat class untuk me-load semua data dari database MySQLclass LoadSemua extends AsyncTask<String, String, String> {
/**
* sebelum melakukan thread di background maka jalankan progres dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Mohon tunggu, Loading Data...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
/**
* dapetkan semua produk dari get url di background
* */
protected String doInBackground(String... args) {
// Buat Parameter
List<NameValuePair> params = new ArrayList<NameValuePair>();
// ambil json dari url
JSONObject json = jParser.makeHttpRequest(url_semua, "GET", params);
// cek logcat untuk response dari json
Log.d("Semua : ", json.toString());
try {
// cek jika tag success
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// data ditemukan
jmobil = json.getJSONArray(TAG_DATA);
// tampilkan perulangan semua produk
for (int i = 0; i < jmobil.length(); i++) {
JSONObject c = jmobil.getJSONObject(i);
// simpan pada variabel
String mb = c.getString(TAG_MBL);
String hg = c.getString(TAG_HRG);
// buat new hashmap
HashMap<String, String> map = new HashMap<String, String>();
// key => value
map.put(TAG_MBL, mb);
map.put(TAG_HRG, hg);
// masukan HashList ke ArrayList
semuaList.add(map);
}
} else {
// jika tidak ada data
// tutup semua proses sebelumnya
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
// hentikan progress ketika semua data didapat
pDialog.dismiss();
// perbarui screen
runOnUiThread(new Runnable() {
public void run() {
ListAdapter adapter = new SimpleAdapter(MainActivity.this,
semuaList, R.layout.list, new String[] { TAG_MBL,
TAG_HRG },
new int[] { R.id.mb, R.id.hg });
setListAdapter(adapter);
ListView lv = getListView();
lv.setTextFilterEnabled(true);
}
});
}
}
Pada onCreateOptionsMenu tambahkan seperti ini.@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_main_actions, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
searchView = (SearchView) menu.findItem(R.id.action_search)
.getActionView();
searchView.setSearchableInfo(searchManager
.getSearchableInfo(getComponentName()));
searchView.setOnQueryTextListener(this);
return super.onCreateOptionsMenu(menu);
}
Query pencarian di searchviewOverride
public boolean onQueryTextChange(String newText) {
ListView lv = getListView();
if (TextUtils.isEmpty(newText)) {
lv.clearTextFilter();
} else {
lv.setFilterText(newText);
}
return false;
}
pada onActivityResult@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// jika kode hasil sama dengan 100
if (resultCode == 100) {
Intent intent = getIntent();
finish();
startActivity(intent);
}
}
Terakhir pada onCreatepublic void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
url_semua = "http://10.0.2.2/test/test.php";
// Hashmap untuk ListView
semuaList = new ArrayList<HashMap<String, String>>();
// Loading products in Background Thread
new LoadSemua().execute();
// Get listview
ListView lv = getListView();
}
Sehingga Koding lengkap MainActivity.java adalah sebagai berikut.package com.codingers;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
public class MainActivity extends ListActivity implements SearchView.OnQueryTextListener {
// Progress Dialog
private ProgressDialog pDialog;
SearchView searchView;
JSONParser jParser = new JSONParser();
ArrayList<HashMap<String, String>> semuaList;
String url_semua = "";
// JSON Node
private static final String TAG_SUCCESS = "success";
private static final String TAG_DATA = "data";
private static final String TAG_MBL = "motor";
private static final String TAG_HRG = "harga";
// pendaftaran JSONArray
JSONArray jmobil = null;
String isi;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
url_semua = "http://10.0.2.2/test/test.php";
// Hashmap untuk ListView
semuaList = new ArrayList<HashMap<String, String>>();
// Loading products in Background Thread
new LoadSemua().execute();
// Get listview
ListView lv = getListView();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// jika kode hasil sama dengan 100
if (resultCode == 100) {
Intent intent = getIntent();
finish();
startActivity(intent);
}
}
class LoadSemua extends AsyncTask<String, String, String> {
/**
* sebelum melakukan thread di background maka jalankan progres dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Mohon tunggu, Loading Data...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
/**
* dapetkan semua produk dari get url di background
* */
protected String doInBackground(String... args) {
// Buat Parameter
List<NameValuePair> params = new ArrayList<NameValuePair>();
// ambil json dari url
JSONObject json = jParser.makeHttpRequest(url_semua, "GET", params);
// cek logcat untuk response dari json
Log.d("Semua : ", json.toString());
try {
// cek jika tag success
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// data ditemukan
jmobil = json.getJSONArray(TAG_DATA);
// tampilkan perulangan semua produk
for (int i = 0; i < jmobil.length(); i++) {
JSONObject c = jmobil.getJSONObject(i);
// simpan pada variabel
String mb = c.getString(TAG_MBL);
String hg = c.getString(TAG_HRG);
// buat new hashmap
HashMap<String, String> map = new HashMap<String, String>();
// key => value
map.put(TAG_MBL, mb);
map.put(TAG_HRG, hg);
// masukan HashList ke ArrayList
semuaList.add(map);
}
} else {
// jika tidak ada data
// tutup semua proses sebelumnya
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
// hentikan progress ketika semua data didapat
pDialog.dismiss();
// perbarui screen
runOnUiThread(new Runnable() {
public void run() {
ListAdapter adapter = new SimpleAdapter(MainActivity.this,
semuaList, R.layout.list, new String[] { TAG_MBL,
TAG_HRG },
new int[] { R.id.mb, R.id.hg });
setListAdapter(adapter);
ListView lv = getListView();
lv.setTextFilterEnabled(true);
}
});
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_main_actions, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
searchView = (SearchView) menu.findItem(R.id.action_search)
.getActionView();
searchView.setSearchableInfo(searchManager
.getSearchableInfo(getComponentName()));
searchView.setOnQueryTextListener(this);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onQueryTextSubmit(String query) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
ListView lv = getListView();
if (TextUtils.isEmpty(newText)) {
lv.clearTextFilter();
} else {
lv.setFilterText(newText);
}
return false;
}
}
Maka hasilnya adalah sebagai berikut, selamat mencoba...
maaf mau tanya,untuk script php nya gimana ya ??
ReplyDeleteterima kasih
mau tanya file xml activity_main nya tidak dipublish disini? jadi kan bisa lihat cara memunculkan menu nya di activity_main.xml
ReplyDelete