SlideShare a Scribd company logo
Tutorial Membuat Aplikasi 
Android 
Implementation RSS Feed Parser 
creatorb dev
Tujuan 
Membuat aplikasi android dengan konsep penampil media informasi, dimana 
aplikasi yang akan dibuat ini adalah menampilkan artikel artikel islami yang dimuat 
dalam web muslim.or.id dan untuk menampilkan saluran berita lain bisa kita rubah 
target url nya sesuai yang di kehendaki. 
Materi 
i. Membuat splashscreen. 
ii. Membuat listview. 
iii. Load data mengguanakan http request. 
iv. Membuat tombol style refresh. 
v. Memparsing dan mengolah data. 
vi. Menampilkan data pada webview. 
Persiapan 
 Tool : Android sdk + eclipse (ADT) 
 OS : ubuntu precise pangolin 12.04 (optional) 
 JAVA 8 (optional)
Pembahasan 
1) Pertama persiapkan pembuatan project dengan membuat project 
baru File > New > Android Applications Project , disini saya 
isi dengan nama MuslimNews. 
Dan selebihnya anda bisa menyesuaikan sendiri kustomisasi icon 
dan nama class activitynya. 
2) Selanjutnya kita akan membuat splash screen adapun properti 
yang diperlukan untuk berjalannya splashscreen yang dibuat ini 
adalah sbb: 
View : 
- splash.xml 
­main. 
xml 
­alpha. 
xml 
­translate. 
xml 
Controler : 
­Splash. 
java 
Other : 
­Androidmanifest. 
xml 
­image 
splash drawable.
Berikut kodingannya: 
splash.xml 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:background="@drawable/splashscreen" > //set gambar splash 
< FrameLayou t 
android:id="@+id/FrameLayout1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignParentBottom="true" 
android:layout_alignParentLeft="true" 
android:layout_alignParentRight="true" 
android:layout_alignParentTop="true" > 
<ProgressBar 
android:id="@+id/progressBar1" 
style="?android:attr/progressBarStyleSmall" 
android:layout_width="109dp" 
android:layout_height="105dp" 
android:layout_gravity="center" /> 
</FrameLayout> 
</RelativeLayout> 
Setelah file splash telah dibuat selanjutnya, membuat style 
animasi nya. Buat folder anim di /res dan selanjutnya dalam 
folder /res/anim maka isi dengan dua file berikut ini. alpha.xml 
dan translate.xml dalam fungsinya alpha untuk memberikan efek 
fade in sedangkan translate akan memberikan efek animasi singkap 
dari bawah ke atas. 
alpha.xml 
<?xml version="1.0" encoding="utf-8"?> 
<alpha 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:fromAlpha="0.0" 
android:toAlpha="1.0" 
android:duration="3100" /> 
translate.xml 
<?xml version="1.0" encoding="utf-8"?> 
<set 
xmlns:android="http://schemas.android.com/apk/res/android">
<translate 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:fromXDelta="0%" 
android:toXDelta="0%" 
android:fromYDelta="200%" 
android:toYDelta="0%" 
android:duration="2000" 
android:zAdjustment="top" /> 
</set> 
selanjutnya adalah class Splash.java disini saya memasukakkan 
class nya pada package id.creatorb.muslimnews.splashscreen untuk 
lebih terstruktur. 
package id.creatorb.muslimnews.splashscreen; 
import id.creatorb.muslimnews.R; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.view.Menu; 
import android.view.MotionEvent; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.widget.FrameLayout; 
import android.widget.ProgressBar; 
public class Splash extends Activity { 
protected boolean _active = true; 
protected int _splashTime = 5000; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.splash); 
StartAnimations();//Menjalankan Method Start Animasi 
Thread splashThread = new Thread() { 
//Timer Splash 
public void run() { 
try{ 
int waited = 0; 
while(_active && (waited < _splashTime)) { 
sleep(700); 
if(_active) { 
waited += 700; 
} 
} 
} catch(InterruptedException e) { 
// do nothing 
} finally { 
finish();
Intent newIntent=new Intent(Splash.this, 
id.creatorb.muslimnews.activity.MainActivity.class);//pindah Activity Main 
startActivityForResult(newIntent,0); 
} 
} 
}; 
splashThread.start(); 
} 
@Override 
public boolean onTouchEvent(MotionEvent event) { 
if (event.getAction() == MotionEvent.ACTION_DOWN) { 
_active = false; 
} 
return true; 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
getMenuInflater().inflate(R.menu.splash, menu); 
return true; 
} 
//Disini Deklarasi Animasinya(StartAnimation) 
private void StartAnimations() { 
// TODO Auto-generated method stub 
//Animasi untuk Frame Layout mengunakan alpha.xml 
Animation anim = AnimationUtils.loadAnimation(this, R.anim.alpha); 
anim.reset(); 
FrameLayout l=(FrameLayout) findViewById(R.id.FrameLayout1); 
l.clearAnimation(); 
l.startAnimation(anim); 
//Animasi untuk ProgressBar1 mengunakan alpha.xml 
Animation anim1 = AnimationUtils.loadAnimation(this, R.anim.alpha); 
anim1.reset(); 
ProgressBar l1=(ProgressBar) findViewById(R.id.progressBar1); 
l1.clearAnimation(); 
l1.startAnimation(anim); 
} 
} 
Bisa dilihat dalam intent terdapat kodingan seperti ini, Intent 
newIntent=new Intent(Splash.this, 
id.creatorb.muslimnews.activity.MainActivity.class); dengan pengertian 
sebenarnya merupakan intent untuk perpindahan dari class Splash 
menuju class MainActivity ketika paramater waktu yang ditentukan 
telah habis. Dan gambar dibawah ini adalah tampilan splashscreen 
yang dibuat dengan menampilkan file gambar pada 
/drawable/splashscreen.png
Selanjutnya tampilan menu, dimana dalam tampilan menunya 
menggunakan ListView yang memuat short list artikel dari web 
muslim.or.id . Dalam tampilan ListView sendiri memuat 3 komponen 
diantaranya ImageView (menampilkan logo muslim.or.id) , kemudian 
judul artikel/berita yang dimuat, selanjutnya tanggal artikel 
tersebut di posting. Lebih jelasnya gambarnya seperti dibawah 
ini:
Seperti gambar di atas, menyesuaikan ListView dengan komponen 
lainnya Android. Pertama, tambahkan ImageView di sebelah kiri 
setiap item ListView. Kemudian, menambahkan dua TextView 
sejajar dengan komponen gambar. Untuk teks seperti screenshoot 
di atas, di format dengan gaya teks dengan huruf besar dan 2 
baris. Untuk teks bagian bawah, dibuat font lebih kecil dari 
yang atas. Lebih singkatnya dalam tata letak layout.xml ini, 
saya menambahkan satu ImageView dan dua TextView di 
RelativeLayout. Berikut kodingannya: 
list_item_artikel.xml 
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:paddingBottom="5dp" 
android:paddingLeft="16dp" 
android:paddingRight="16dp" 
android:paddingTop="5dp" 
android:background="#00BFFF">
< ImageVie w 
android:id="@+id/postThumb" 
android:layout_width="60dp" 
android:layout_height="60dp" 
android:layout_marginRight="5dp" 
android:scaleType="centerCrop" 
android:src="@drawable/muslim_logo_creatorb" /> 
<TextView 
android:id="@+id/postTitleLabel" 
android:layout_width="0dp" 
android:layout_height="wrap_content" 
android:layout_alignParentRight="true" 
android:layout_alignTop="@id/postThumb" 
android:layout_toRightOf="@id/postThumb" 
android:ellipsize="end" 
android:maxLines="2" 
android:tex t = "Post Box " 
android:textIsSelectable = "false " 
android:textSize="16sp" /> 
<TextView 
android:id="@+id/postDateLabel" 
android:layout_width="0dp" 
android:layout_height="wrap_content" 
android:layout_alignBottom="@id/postThumb" 
android:layout_alignParentRight="true" 
android:layout_toRightOf="@id/postThumb" 
android:maxLines="1" 
android:text = "Nov 10, 2014 " 
android:textSize="12sp" /> 
</RelativeLayout> 
Kemudian membuat nilai object baru untuk menahan semua data 
postingan baru yang diambil pada web melalui rss. 
PostData.java 
package id.creatorb.muslimnews.activity.post; 
public class PostData { 
public String postThumbUrl; 
public String postTitle; 
public String postDate; 
public String postLink; 
public String postContent; 
public String postGuid; 
Kemudian selanjutnya untuk menampilkan data lengkap pada 
masing masing listview membutuhkan adapater class untuk 
mewariskan data dari ArrayAdapter dan override dari fungsi 
getView untuk ditampilkan pada sebuah list.
Pada teknik listview seringkali kita dibentrokan dengan 
beban load yang besar dikarenakan penerimaan data dari 
server yang disimpan pada adapter dan semakin lama semakin 
overload. 
Maka untuk meningkatkan kinerjanya digunakan metode getView 
dari data muat ulang dan tidak juga mengguanakan findViewbyId 
melainkan view holder untuk menampilkannnya secara langsung 
tanpa mencari permasing masing id nya. Berikut kodenya: 
DaftarPostAdapter.java 
package id.creatorb.muslimnews.activity.adapter; 
import id.creatorb.muslimnews.activity.post.PostData; 
import java.util.ArrayList; 
import id.creatorb.muslimnews.R; 
import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 
public class DaftarPostAdapter extends ArrayAdapter<PostData> { 
private LayoutInflater inflater; 
private ArrayList<PostData> datas; 
public DaftarPostAdapter(Context context, int textViewResourceId, 
ArrayList<PostData> objects) { 
super(context, textViewResourceId, objects); 
// TODO Auto-generated constructor stub 
inflater = ((Activity) context).getLayoutInflater(); 
datas = objects; 
} 
static class ViewHolder { 
TextView postTitleView; 
TextView postDateView; 
ImageView postThumbView; 
} 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
ViewHolder viewHolder; 
if (convertView == null) { 
convertView = inflater.inflate(R.layout.list_item_artikel, 
null); 
viewHolder = new ViewHolder(); 
viewHolder.postThumbView = (ImageView) convertView 
.findViewById(R.id.postThumb);
viewHolder.postTitleView = (TextView) convertView 
.findViewById(R.id.postTitleLabel); 
viewHolder.postDateView = (TextView) convertView 
.findViewById(R.id.postDateLabel); 
convertView.setTag(viewHolder); 
} else { 
viewHolder = (ViewHolder) convertView.getTag(); 
} 
if (datas.get(position).postThumbUrl == null) { 
viewHolder.postThumbView 
.setImageResource(R.drawable.muslim_logo_creato 
rb); 
} 
viewHolder.postTitleView.setText(datas.get(position).postTitle); 
viewHolder.postDateView.setText(datas.get(position).postDate); 
return convertView;} 
} 
Selanjutnya adalah teknik pengambilan data melaui http 
request. Jika kita menggunakan teknik http request tanpa 
mempertimbangkan keefesiensitas maka bisa dipastikan aplikasi 
kita akan terlihat hank/freeze/macet dalam memuat content 
dari sebuah web karena dalam permintaan data pada sebuah 
jaringan server membutuhkan konektifitas yang stabil dan 
waktu tersendiri jika tidak ditangani dengan baik maka hal 
pertama yang terjadi pada user interface kita adalah blank 
sampai proses permintaan terpenuhi karena tidak ada aktifitas 
yang dilakukan di layar karena sedang menangani proses 
pengambilan data dari server. Menyiasati hal ini kita bisa 
melakukan aktifitas tersebut di belakang layar, baik bisa 
menggunanakan thread ataupun AsyncTask lalu apa perbedaan 
dari keduanya ? Dan mana yang harus di pilih ? Itu bisa 
disesuaikan dengan anda sendiri karena Sayangnya, menggunakan 
thread dapat membuat kode anda lebih rumit dan lebih sulit 
untuk dibaca. Untuk membebaskan masalah ini, saya sarankan 
untuk menggunakan AsyncTask sebagai gantinya. Pada dasarnya 
AsyncTask hanya dapat digunakan oleh subclass. Oleh karena 
itu, saya akan membuat subclass dari AsyncTask di kelas 
MainActivity, dan melaksanakan permintaan HTTP dalam 
subclass. Seperti kode dibawah ini: 
private class HTTPDownloadTask extends AsyncTask<String, Integer, PostData[]> 
{ 
@Override 
protected PostData[] doInBackground(String... params) { 
// TODO Auto-generated method stub 
String urlStr = params[0]; 
InputStream is = null;
try { 
URL url = new URL(urlStr); 
HttpURLConnection connection = (HttpURLConnection) 
url.openConnection(); 
connection.setReadTimeout(10*1000); 
connection.setConnectTimeout(10*1000); 
connection.setRequestMethod("GET"); 
connection.setDoInput(true); 
connection.connect(); 
int response = connection.getResponseCode(); 
Log.d("debug", "The response is: " + response); 
is = connection.getInputStream(); 
//read string 
final int bufferSize = 1024; 
byte[] buffer = new byte[1024]; 
ByteArrayOutputStream os = new ByteArrayOutputStream(); 
while(true) { 
int count = is.read(buffer, 0, bufferSize); 
if(count == -1) { 
break; 
} 
os.write(buffer); 
} 
os.close(); 
String result = new String(os.toByteArray(), "UTF-8"); 
Log.d("debug", result); 
} catch (MalformedURLException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} catch (IOException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 
return null; 
} 
} 
Kemudian selanjutnya adalah memparsingnya, Dalam sampel kode 
diatas, saya menggunakan HttpURLConnection untuk men­download 
data dari url. Kemudian, saya menggunakan ByteArrayOutputStream 
untuk membaca semua data dari InputStream. Untuk tujuan debug, 
saya mencetak data ke Log konsol. Setelah kita mendapatkan data 
rss feed dari situs web, kita akan mengurai RSS Feed xml untuk 
menjadikan ViewList, sedangkan untuk mengurai format data XML di 
Android, menggunakan XmlPullParser, itu adalah XML mesin parse 
yang direkomendasikan oleh situs Developer Android. Hal ini 
dapat mengurai XML dalam cara yang efisien dan dipertahankan 
pada Android. Selain itu, kita juga bisa memilih KXmlParser via 
XmlPullParserFactory.newPullParser () atau ExpatPullParser via 
Xml.newPullParser ().
Entah xml parser dapat bekerja dengan baik. Dalam situs 
pengembang Android, sudah memberikan contoh untuk menunjukkan 
bagaimana mengurai xml oleh ExpatPullParser. Dan berikut contoh 
konsep dalam aplikasi ini : 
XmlPullParserFactory factory = XmlPullParserFactory 
.newInstance(); 
factory.setNamespaceAware(true); 
XmlPullParser xpp = factory.newPullParser(); 
xpp.setInput(is, null); 
int eventType = xpp.getEventType(); 
while (eventType != XmlPullParser.END_DOCUMENT) { 
if (eventType == XmlPullParser.START_DOCUMENT) { 
//mulai parsing 
} else if (eventType == XmlPullParser.START_TAG) { 
//cari permulaan tag 
} else if (eventType == XmlPullParser.END_TAG) { 
//caria khir tag 
} else if (eventType == XmlPullParser.TEXT) { 
//cari text diantara tag 
} 
eventType = xpp.next(); 
} 
Dan untuk penerapan dari beberapa konsep diatas ada pada 
MainActivity.java dengan beberapa kode berikut: 
private class RssDataController extends 
AsyncTask<String, Integer, ArrayList<PostData>> { 
private RSSXMLTag currentTag; 
@Override 
protected ArrayList<PostData> doInBackground(String... params) { 
// TODO Auto-generated method stub 
String urlStr = params[0]; 
InputStream is = null; 
ArrayList<PostData> postDataList = new ArrayList<PostData>(); 
try { 
URL url = new URL(urlStr); 
HttpURLConnection connection = (HttpURLConnection) url 
.openConnection(); 
connection.setReadTimeout(10 * 1000); 
connection.setConnectTimeout(10 * 1000); 
connection.setRequestMethod("GET"); 
connection.setDoInput(true); 
connection.connect(); 
int response = connection.getResponseCode(); 
Log.d("debug", "The response is: " + response); 
is = connection.getInputStream();
// parse xml 
XmlPullParserFactory factory = XmlPullParserFactory 
.newInstance(); 
factory.setNamespaceAware(true); 
XmlPullParser xpp = factory.newPullParser(); 
xpp.setInput(is, null); 
int eventType = xpp.getEventType(); 
PostData pdData = null; 
SimpleDateFormat dateFormat = new SimpleDateFormat( 
"EEE, DD MMM yyyy HH:mm:ss", Locale.US); 
while (eventType != XmlPullParser.END_DOCUMENT) { 
if (eventType == XmlPullParser.START_DOCUMENT) { 
} else if (eventType == XmlPullParser.START_TAG) { 
if (xpp.getName().equals("item")) { 
pdData = new PostData(); 
currentTag = RSSXMLTag.IGNORETAG; 
} else if (xpp.getName().equals("title")) { 
currentTag = RSSXMLTag.TITLE; 
} else if (xpp.getName().equals("link")) { 
currentTag = RSSXMLTag.LINK; 
} else if (xpp.getName().equals("pubDate")) 
{ 
currentTag = RSSXMLTag.DATE; 
} else if (xpp.getName().equals("encoded")) 
{ 
currentTag = RSSXMLTag.CONTENT; 
} else if (xpp.getName().equals("guid")) { 
currentTag = RSSXMLTag.GUID; 
} 
} else if (eventType == XmlPullParser.END_TAG) { 
if (xpp.getName().equals("item")) { 
// format data disini 
// dan lainnya pada adapter 
Date postDate = dateFormat.parse(pdData.postDate); 
pdData.postDate = dateFormat.format(postDate); 
postDataList.add(pdData); 
} else { 
currentTag = RSSXMLTag.IGNORETAG; 
} 
} else if (eventType == XmlPullParser.TEXT) { 
String content = xpp.getText(); 
content = content.trim(); 
if (pdData != null) { 
switch (currentTag) { 
case TITLE: 
if (content.length() != 0) { 
if (pdData.postTitle != null) { 
pdData.postTitle += content; 
else { 
pdData.postTitle = content; 
} 
}b 
reak; 
case LINK:
if (content.length() != 0) { 
if (pdData.postLink != null) { 
pdData.postLink += content; 
else { 
pdData.postLink = content; 
} 
}b 
reak; 
case DATE: 
if (content.length() != 0) { 
if (pdData.postDate != null) { 
pdData.postDate += content; 
else { 
pdData.postDate = content; 
} 
}b 
reak; 
case CONTENT: 
if (content.length() != 0) { 
if (pdData.postContent != null) { 
pdData.postContent += content; 
else { 
pdData.postContent = content; 
} 
}b 
reak; 
case GUID: 
if (content.length() != 0) { 
if (pdData.postGuid != null) { 
pdData.postGuid += content; 
else { 
pdData.postGuid = content; 
} 
}b 
reak; 
default: 
break; 
} 
} 
} 
eventType = xpp.next(); 
} 
Log.v("tst", String.valueOf((postDataList.size()))); 
} catch (MalformedURLException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} catch (IOException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} catch (XmlPullParserException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} catch (ParseException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
}
return postDataList; 
} 
@Override 
protected void onPostExecute(ArrayList<PostData> result) { 
// TODO Auto-generated method stub 
boolean isupdated = false; 
for (int i = 0; i < result.size(); i++) { 
//cek apakah post telah ada pada list 
if (guidList.contains(result.get(i).postGuid)) { 
continue; 
} else { 
isupdated = true; 
guidList.add(result.get(i).postGuid); 
} 
if (isRefreshLoading) { 
listData.add(i, result.get(i)); 
} else { 
listData.add(result.get(i)); 
} 
} 
if (isupdated) { 
postAdapter.notifyDataSetChanged(); 
} 
isLoading = false; 
if (isRefreshLoading) { 
postListView.onRefreshComplete(); 
} else { 
postListView.onLoadingMoreComplete(); 
} 
super.onPostExecute(result); 
} 
} 
Untuk kelengkapan kodenya bisa di cek pada source code yang 
disediakan. 
Setelah listview selesai seharusnya kita melanjutkan pada 
pembahasan content, namun ada tidak langsung kesana karena ada 
fitur tersembunyi yang perlu dijelaskan disini ya itu adalah 
fitur refresh untuk memuat ulang dan mengambil data yang belum 
tersedia pada device dari server, dalam fitur refresh salah 
satunya yang dipakai untuk aplikasi ini adalah drag refresh, 
dimana permintaan refresh akan dilakukan dengan drag (menarik) 
layar ke arah bawah. 
Pertama­tama, 
kita akan menginisialisasi tampilan judul dalam 
constructor. Pada tampilan header, ada gambar panah, progress 
bar dan dua kotak teks. Seperti gambar dibawah.
Dan kodingannya sebagai berikut: 
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:paddingBottom="10dp" 
android:paddingLeft="20dp" > 
< RelativeLayout 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
tools:context=".MainActivity" > 
<LinearLayout 
android:id="@+id/linearLayout1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignParentTop="true" 
android:layout_centerHorizontal="true" 
android:gravity="center_horizontal" 
android:minWidth="200dp" 
android:orientation="vertical" 
android:paddingLeft="10dp" > 
<TextView 
android:id="@+id/head_tipsTextView" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="@string/pull_to_refresh" 
android:textSize="15sp" />
<TextView 
android:id="@+id/head_lastUpdatedDateTextView" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="@string/pull_to_refresh" 
android:textSize="12sp" /> 
</LinearLayout> 
<FrameLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignParentTop="true" 
android:layout_toLeftOf="@+id/linearLayout1" 
android:minHeight="30dp" 
android:minWidth="30dp" > 
<ImageView 
android:id="@+id/head_arrowImageView" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="center" 
android:contentDescription="@string/head_arrowImage" 
android:src="@drawable/refresh_creatorb" /> 
<ProgressBar 
android:id="@+id/head_progressBar" 
style="?android:attr/progressBarStyleSmall" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="center" 
android:visibility="gone" /> 
</FrameLayout> 
</RelativeLayout> 
</LinearLayout> 
Dan ini adalah inisialisasi tampilan judul di listview: 
private void init(Context context) { 
inflater = LayoutInflater.from(context); 
headerRelativeLayout = (RelativeLayout)inflate(context, 
R.layout.refresh_header_view, null); 
arrowImage = 
(ImageView)headerRelativeLayout.findViewById(R.id.head_arrowImageView); 
progressBar = 
(ProgressBar)headerRelativeLayout.findViewById(R.id.head_progressBar); 
headerTextView = 
(TextView)headerRelativeLayout.findViewById(R.id.head_tipsTextView); 
lastUpdateDateTextView = 
(TextView)headerRelativeLayout.findViewById(R.id.head_lastUpdatedDateTextView)
; 
headerRelativeLayout.setPadding(0, -1 * HEADER_HEIGHT, 0, 0); 
this.addHeaderView(headerRelativeLayout, null, false); 
} 
Dalam metode fungsi onTouchEvent, bisamenangani interaksi 
pengguna, seperti sentuhan, tarik ke bawah, dan lepaskan. Bisa 
dilihat dalam tiga MotionEvent diantaranya Setelah pengguna 
menyentuh layar, event ACTION_DOWN trigger. Dalam keadaan ini, 
dimulai untuk merecord titik awal dari mana pengguna mulai 
menarik ListView, Kemudian ketika pengguna sedang menarik 
ListView, event ACTION_MOVE trigger. Dalam keadaan ini, akan 
mengubah header tampilan atas untuk menunjukkan indikator 
refresh selanjutnya setelah pengguna event ACTION_UP trigger. 
Akan memeriksa header dari tampilan judul dan mengeksekusi 
perintah apakah menjalankan fungsi refresh atau tidak. 
Contoh sederhanya berikut: 
@Override 
public boolean onTouchEvent(MotionEvent ev) { 
// TODO Auto-generated method stub 
switch (ev.getAction()) { 
case MotionEvent.ACTION_DOWN: 
//jikaDidrag = true; 
startY = ev.getY(); 
break; 
case MotionEvent.ACTION_MOVE: 
if (!isLoading) { 
deltaY = ev.getY() - startY; 
Log.d("debug", String.valueOf(deltaY)); 
headerRelativeLayout.setPadding( 
headerRelativeLayout.getPaddingLeft(), -1 
* HEADER_HEIGHT + (int) deltaY, 0, 
headerRelativeLayout.getPaddingBottom());
if(headerRelativeLayout.getPaddingTop() >= HEADER_HEIGHT && currentState == 
STATE_PULL_TO_REFRESH) { 
//rubah state 
currentState = STATE_RELEASE_TO_UPDATE; 
arrowImage.clearAnimation(); 
arrowImage.startAnimation(rotateAnimation); 
headerTextView.setText(R.string.release_to_refresh); 
} else if (headerRelativeLayout.getPaddingTop() < HEADER_HEIGHT 
&& currentState == STATE_RELEASE_TO_UPDATE) { 
currentState = STATE_PULL_TO_REFRESH; 
arrowImage.clearAnimation(); 
arrowImage.startAnimation(reverseRotateAnimation); 
headerTextView.setText(R.string.pull_to_refresh); 
} 
} 
break; 
case MotionEvent.ACTION_UP: 
//jikaDiDrag = false; 
if (!isLoading) { 
if (headerRelativeLayout.getPaddingTop() < HEADER_HEIGHT) { 
// kembali 
headerRelativeLayout.setPadding( 
headerRelativeLayout.getPaddingLeft(), -1 
* HEADER_HEIGHT, 0, 
headerRelativeLayout.getPaddingBottom()); 
} else { 
// maka masuk pada HEADER_HEIGHT dan mulai berjalan 
headerRelativeLayout.setPadding( 
headerRelativeLayout.getPaddingLeft(), 
HEADER_TOP, 0,
headerRelativeLayout.getPaddingBottom()); 
headerTextView.setText(R.string.loading); 
progressBar.setVisibility(View.VISIBLE); 
arrowImage.clearAnimation(); 
arrowImage.setVisibility(View.GONE); 
isLoading = true; //mulai loading 
if (refreshDelegate != null) { 
refreshDelegate.startFresh(); 
} 
} 
} 
break; 
default: 
break; 
} 
return super.onTouchEvent(ev); 
} 
Selain header juga ada footer yang berfungsi untuk mengirim 
permintaan data pada server namun tidak seperti di header yang 
selalu meminta data baru di server melainkan data lama yang 
belum tersedia di listview dan ketika field tesebut di klik 
maka akan meload data postingan lama/sebelumnya. 
Pembahasan terakhir adalah webview, dimana saat kita memilih 
salah satu artikel yang terdapat pada listview maka selanjutnya 
system akan membawa anda tidak langsung menuju browser, 
melainkan tetap berjalan dalam aplikasi. Hal ini bisa dilakukan 
dengan menerapkan metode webview.
Hal tersebut dilakukan dengan menyisipkan OnItemClickListener 
pada list item artikel, 
postListView.setOnItemClickListener(onItemClickListener); 
Dan selanjutnya adalah interface untuk merespon dan menangani 
perintah tersebut, lebih jelasnya berikut: 
private OnItemClickListener onItemClickListener = new OnItemClickListener() 
{ 
@Override 
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
long arg3) { 
// TODO Auto-generated method stub
PostData data = listData.get(arg2 - 1); 
Bundle postInfo = new Bundle(); 
postInfo.putString("content", data.postContent); 
Intent postviewIntent = new Intent(MainActivity.this, 
LihatPost.class); 
postviewIntent.putExtras(postInfo); 
startActivity(postviewIntent); 
} 
}; 
Diatas bisa dilihat penerapan Onclick listener pada item di 
listview. Kemudian, kita instantiate Activity Intent baru dan 
meneruskan data ke activity dengan Bundle. Selanjutnya panggil 
startActivity untuk beralih ke Activity baru yaitu 
LihatPost.java dimana activity tersebut adalah class untuk 
menampilkan webview berikut kodenya: 
package id.creatorb.muslimnews.activity; 
import id.creatorb.muslimnews.R; 
import android.app.Activity; 
import android.os.Bundle; 
import android.webkit.WebView; 
public class LihatPost extends Activity { 
private WebView webView; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
// TODO Auto-generated method stub 
super.onCreate(savedInstanceState); 
this.setContentView(R.layout.postview); 
Bundle bundle = this.getIntent().getExtras(); 
String postContent = bundle.getString("content"); 
webView = (WebView)this.findViewById(R.id.webview); 
webView.loadData(postContent, "text/html; charset=utf-8","utf-8"); 
} 
} 
Perhatikan kode diatas, kita mendapat data dari Bundle yang 
dilalui oleh activity sebelumnya. Setelah mendapatkan parsing 
RSS nya maka dengan web view load data ini lah yang membuat 
kita bisa menampilkan pada layout content dengan format 
text/html.
For more tutorials you can subscribe me. 
RSS Feed tut's : https://www.youtube.com/watch?v=YGsNAyafHI0 
creatorb

More Related Content

What's hot

Android membuat-aplikasi-sederhana
Android membuat-aplikasi-sederhanaAndroid membuat-aplikasi-sederhana
Android membuat-aplikasi-sederhana
Robby Febrian
 
Tutorial Android Membuat Aplikasi senter Flash light
Tutorial Android Membuat Aplikasi senter Flash lightTutorial Android Membuat Aplikasi senter Flash light
Tutorial Android Membuat Aplikasi senter Flash light
Agus Haryanto
 
Belajar Android PHP MySQL Login dengan Volley
Belajar Android PHP MySQL Login dengan VolleyBelajar Android PHP MySQL Login dengan Volley
Belajar Android PHP MySQL Login dengan Volley
Agus Haryanto
 
Modul praktikum 17 - Android Sudaryatno
Modul praktikum 17 - Android SudaryatnoModul praktikum 17 - Android Sudaryatno
Modul praktikum 17 - Android Sudaryatno
Yatno Sudar
 
Belajar Android Studio - Membuat Aplikasi Android Sederhana
Belajar Android Studio - Membuat Aplikasi Android SederhanaBelajar Android Studio - Membuat Aplikasi Android Sederhana
Belajar Android Studio - Membuat Aplikasi Android Sederhana
Agus Haryanto
 
Ebook tutorial pemrograman android
Ebook tutorial pemrograman android Ebook tutorial pemrograman android
Ebook tutorial pemrograman android
Candra Adi Putra
 
Membuat media pembelajaran berbasis android
Membuat media pembelajaran berbasis androidMembuat media pembelajaran berbasis android
Membuat media pembelajaran berbasis android
Funnys Rahman
 
Membuat sendiri aplikasi android
Membuat sendiri aplikasi androidMembuat sendiri aplikasi android
Membuat sendiri aplikasi androidMdeno Akbar
 
Pertemuan 5 list view
Pertemuan 5 list viewPertemuan 5 list view
Pertemuan 5 list view
heriakj
 
Pertemuan 11 thread dan asyntask
Pertemuan 11 thread dan asyntaskPertemuan 11 thread dan asyntask
Pertemuan 11 thread dan asyntask
heriakj
 
Membuat Aplikasi Android Keren
Membuat Aplikasi Android KerenMembuat Aplikasi Android Keren
Membuat Aplikasi Android Keren
Hangga Aji Sayekti
 
Simple tutorial : Android get and post data
Simple tutorial : Android get and post dataSimple tutorial : Android get and post data
Simple tutorial : Android get and post data
Pikiring Hutama
 
Modul praktikum 13 - Android Sudaryatno
Modul praktikum 13 - Android SudaryatnoModul praktikum 13 - Android Sudaryatno
Modul praktikum 13 - Android Sudaryatno
Yatno Sudar
 
Modul praktikum 16 - Android Sudaryatno
Modul praktikum 16 - Android SudaryatnoModul praktikum 16 - Android Sudaryatno
Modul praktikum 16 - Android Sudaryatno
Yatno Sudar
 
372 Dasar Pengenalan Android Programming
372 Dasar Pengenalan Android Programming372 Dasar Pengenalan Android Programming
372 Dasar Pengenalan Android Programming
Wirat Mojo
 
Modul praktikum 11 - Android Sudaryatno
Modul praktikum 11 - Android SudaryatnoModul praktikum 11 - Android Sudaryatno
Modul praktikum 11 - Android Sudaryatno
Yatno Sudar
 
Modul praktikum 12 - Android Sudaryatno
Modul praktikum 12 - Android SudaryatnoModul praktikum 12 - Android Sudaryatno
Modul praktikum 12 - Android Sudaryatno
Yatno Sudar
 
Tutorial Android Template Aplikasi Edukasi
Tutorial Android Template Aplikasi EdukasiTutorial Android Template Aplikasi Edukasi
Tutorial Android Template Aplikasi Edukasi
Toni Setyawan
 
Panduan Memulai Firebase Android
Panduan Memulai Firebase AndroidPanduan Memulai Firebase Android
Panduan Memulai Firebase Android
Irfan Fediyanto
 
Pertemuan 4 alert dan toast
Pertemuan 4 alert dan toastPertemuan 4 alert dan toast
Pertemuan 4 alert dan toast
heriakj
 

What's hot (20)

Android membuat-aplikasi-sederhana
Android membuat-aplikasi-sederhanaAndroid membuat-aplikasi-sederhana
Android membuat-aplikasi-sederhana
 
Tutorial Android Membuat Aplikasi senter Flash light
Tutorial Android Membuat Aplikasi senter Flash lightTutorial Android Membuat Aplikasi senter Flash light
Tutorial Android Membuat Aplikasi senter Flash light
 
Belajar Android PHP MySQL Login dengan Volley
Belajar Android PHP MySQL Login dengan VolleyBelajar Android PHP MySQL Login dengan Volley
Belajar Android PHP MySQL Login dengan Volley
 
Modul praktikum 17 - Android Sudaryatno
Modul praktikum 17 - Android SudaryatnoModul praktikum 17 - Android Sudaryatno
Modul praktikum 17 - Android Sudaryatno
 
Belajar Android Studio - Membuat Aplikasi Android Sederhana
Belajar Android Studio - Membuat Aplikasi Android SederhanaBelajar Android Studio - Membuat Aplikasi Android Sederhana
Belajar Android Studio - Membuat Aplikasi Android Sederhana
 
Ebook tutorial pemrograman android
Ebook tutorial pemrograman android Ebook tutorial pemrograman android
Ebook tutorial pemrograman android
 
Membuat media pembelajaran berbasis android
Membuat media pembelajaran berbasis androidMembuat media pembelajaran berbasis android
Membuat media pembelajaran berbasis android
 
Membuat sendiri aplikasi android
Membuat sendiri aplikasi androidMembuat sendiri aplikasi android
Membuat sendiri aplikasi android
 
Pertemuan 5 list view
Pertemuan 5 list viewPertemuan 5 list view
Pertemuan 5 list view
 
Pertemuan 11 thread dan asyntask
Pertemuan 11 thread dan asyntaskPertemuan 11 thread dan asyntask
Pertemuan 11 thread dan asyntask
 
Membuat Aplikasi Android Keren
Membuat Aplikasi Android KerenMembuat Aplikasi Android Keren
Membuat Aplikasi Android Keren
 
Simple tutorial : Android get and post data
Simple tutorial : Android get and post dataSimple tutorial : Android get and post data
Simple tutorial : Android get and post data
 
Modul praktikum 13 - Android Sudaryatno
Modul praktikum 13 - Android SudaryatnoModul praktikum 13 - Android Sudaryatno
Modul praktikum 13 - Android Sudaryatno
 
Modul praktikum 16 - Android Sudaryatno
Modul praktikum 16 - Android SudaryatnoModul praktikum 16 - Android Sudaryatno
Modul praktikum 16 - Android Sudaryatno
 
372 Dasar Pengenalan Android Programming
372 Dasar Pengenalan Android Programming372 Dasar Pengenalan Android Programming
372 Dasar Pengenalan Android Programming
 
Modul praktikum 11 - Android Sudaryatno
Modul praktikum 11 - Android SudaryatnoModul praktikum 11 - Android Sudaryatno
Modul praktikum 11 - Android Sudaryatno
 
Modul praktikum 12 - Android Sudaryatno
Modul praktikum 12 - Android SudaryatnoModul praktikum 12 - Android Sudaryatno
Modul praktikum 12 - Android Sudaryatno
 
Tutorial Android Template Aplikasi Edukasi
Tutorial Android Template Aplikasi EdukasiTutorial Android Template Aplikasi Edukasi
Tutorial Android Template Aplikasi Edukasi
 
Panduan Memulai Firebase Android
Panduan Memulai Firebase AndroidPanduan Memulai Firebase Android
Panduan Memulai Firebase Android
 
Pertemuan 4 alert dan toast
Pertemuan 4 alert dan toastPertemuan 4 alert dan toast
Pertemuan 4 alert dan toast
 

Viewers also liked

Belajar Android Studio CRUD Data Mahasiswa
Belajar Android Studio CRUD Data MahasiswaBelajar Android Studio CRUD Data Mahasiswa
Belajar Android Studio CRUD Data Mahasiswa
Agus Haryanto
 
Delphi XE5 Datasheet
Delphi XE5 DatasheetDelphi XE5 Datasheet
Delphi XE5 Datasheet
Embarcadero Technologies
 
Embarcadero ER/Studio Enterprise Team Edition Overview
Embarcadero ER/Studio Enterprise Team Edition OverviewEmbarcadero ER/Studio Enterprise Team Edition Overview
Embarcadero ER/Studio Enterprise Team Edition Overview
Embarcadero Technologies
 
RAD Studio XE5 in Action Tech Preview
RAD Studio XE5 in Action Tech PreviewRAD Studio XE5 in Action Tech Preview
RAD Studio XE5 in Action Tech Preview
Softline
 
Introducing ER/Studio Team Server
Introducing ER/Studio Team ServerIntroducing ER/Studio Team Server
Introducing ER/Studio Team Server
Embarcadero Technologies
 
Manajemen jaringan server web server
Manajemen jaringan server   web serverManajemen jaringan server   web server
Manajemen jaringan server web server
Dela Handayani
 
Setting ubuntu server sebagai pc router
Setting ubuntu server sebagai pc routerSetting ubuntu server sebagai pc router
Setting ubuntu server sebagai pc router
Nimrod Leon Scott Kenedy
 
Setting PROXY Ubuntu Server
Setting PROXY Ubuntu ServerSetting PROXY Ubuntu Server
Setting PROXY Ubuntu Server
Muhammad Erick Mahaputra
 
Instalasi Ubuntu Server di Virtual Box
Instalasi Ubuntu Server di Virtual BoxInstalasi Ubuntu Server di Virtual Box
Instalasi Ubuntu Server di Virtual Box
nooradiana
 
IMPLEMENTASI SINKRONISASI DATABASE MENGGUNAKAN SQL DAN VALIDASI DATA BERDASAR...
IMPLEMENTASI SINKRONISASI DATABASE MENGGUNAKAN SQL DAN VALIDASI DATA BERDASAR...IMPLEMENTASI SINKRONISASI DATABASE MENGGUNAKAN SQL DAN VALIDASI DATA BERDASAR...
IMPLEMENTASI SINKRONISASI DATABASE MENGGUNAKAN SQL DAN VALIDASI DATA BERDASAR...
Uofa_Unsada
 
Tutorial Lengkap Instalasi ubuntu server 12.04 [sigernetwork.com]
Tutorial Lengkap Instalasi ubuntu server 12.04 [sigernetwork.com]Tutorial Lengkap Instalasi ubuntu server 12.04 [sigernetwork.com]
Tutorial Lengkap Instalasi ubuntu server 12.04 [sigernetwork.com]
pakmin
 
Tutorial Cara Instalasi Ubuntu Linux Lengkap
Tutorial Cara Instalasi Ubuntu Linux LengkapTutorial Cara Instalasi Ubuntu Linux Lengkap
Tutorial Cara Instalasi Ubuntu Linux Lengkap
creatorb dev
 
OPTIMASI PENJADWALAN MATA KULIAH DENGAN MENGGUNAKAN ALGORITMA GENETIKA (STUDI...
OPTIMASI PENJADWALAN MATA KULIAH DENGAN MENGGUNAKAN ALGORITMA GENETIKA (STUDI...OPTIMASI PENJADWALAN MATA KULIAH DENGAN MENGGUNAKAN ALGORITMA GENETIKA (STUDI...
OPTIMASI PENJADWALAN MATA KULIAH DENGAN MENGGUNAKAN ALGORITMA GENETIKA (STUDI...
Uofa_Unsada
 
Mahir administrasi server dan router ubuntu server
Mahir administrasi server dan router ubuntu serverMahir administrasi server dan router ubuntu server
Mahir administrasi server dan router ubuntu server
Acep Nugraha
 
Laporan Installasi ubuntu server
Laporan Installasi ubuntu serverLaporan Installasi ubuntu server
Laporan Installasi ubuntu server
Alda Abad
 
2013 12. Administrasi Server Linux Ubuntu
2013 12. Administrasi Server Linux Ubuntu2013 12. Administrasi Server Linux Ubuntu
2013 12. Administrasi Server Linux Ubuntu
Syiroy Uddin
 
Penerapan Web 2.0 di Perpustakaan
Penerapan Web 2.0 di PerpustakaanPenerapan Web 2.0 di Perpustakaan
Penerapan Web 2.0 di Perpustakaan
Shinta26
 
Ubuntu server-904 membuat-server_dengan_ubuntu
Ubuntu server-904 membuat-server_dengan_ubuntuUbuntu server-904 membuat-server_dengan_ubuntu
Ubuntu server-904 membuat-server_dengan_ubuntu
Raden Ozan
 

Viewers also liked (20)

Belajar Android Studio CRUD Data Mahasiswa
Belajar Android Studio CRUD Data MahasiswaBelajar Android Studio CRUD Data Mahasiswa
Belajar Android Studio CRUD Data Mahasiswa
 
Delphi XE5 Datasheet
Delphi XE5 DatasheetDelphi XE5 Datasheet
Delphi XE5 Datasheet
 
Embarcadero ER/Studio Enterprise Team Edition Overview
Embarcadero ER/Studio Enterprise Team Edition OverviewEmbarcadero ER/Studio Enterprise Team Edition Overview
Embarcadero ER/Studio Enterprise Team Edition Overview
 
RAD Studio XE5 in Action Tech Preview
RAD Studio XE5 in Action Tech PreviewRAD Studio XE5 in Action Tech Preview
RAD Studio XE5 in Action Tech Preview
 
Introducing ER/Studio Team Server
Introducing ER/Studio Team ServerIntroducing ER/Studio Team Server
Introducing ER/Studio Team Server
 
Manajemen jaringan server web server
Manajemen jaringan server   web serverManajemen jaringan server   web server
Manajemen jaringan server web server
 
Tutorial instalasi ubuntu server 12.04, setting DNS server dan Web server
Tutorial instalasi ubuntu server 12.04, setting DNS server dan Web serverTutorial instalasi ubuntu server 12.04, setting DNS server dan Web server
Tutorial instalasi ubuntu server 12.04, setting DNS server dan Web server
 
Setting ubuntu server sebagai pc router
Setting ubuntu server sebagai pc routerSetting ubuntu server sebagai pc router
Setting ubuntu server sebagai pc router
 
Makalah ubuntu server
Makalah ubuntu serverMakalah ubuntu server
Makalah ubuntu server
 
Setting PROXY Ubuntu Server
Setting PROXY Ubuntu ServerSetting PROXY Ubuntu Server
Setting PROXY Ubuntu Server
 
Instalasi Ubuntu Server di Virtual Box
Instalasi Ubuntu Server di Virtual BoxInstalasi Ubuntu Server di Virtual Box
Instalasi Ubuntu Server di Virtual Box
 
IMPLEMENTASI SINKRONISASI DATABASE MENGGUNAKAN SQL DAN VALIDASI DATA BERDASAR...
IMPLEMENTASI SINKRONISASI DATABASE MENGGUNAKAN SQL DAN VALIDASI DATA BERDASAR...IMPLEMENTASI SINKRONISASI DATABASE MENGGUNAKAN SQL DAN VALIDASI DATA BERDASAR...
IMPLEMENTASI SINKRONISASI DATABASE MENGGUNAKAN SQL DAN VALIDASI DATA BERDASAR...
 
Tutorial Lengkap Instalasi ubuntu server 12.04 [sigernetwork.com]
Tutorial Lengkap Instalasi ubuntu server 12.04 [sigernetwork.com]Tutorial Lengkap Instalasi ubuntu server 12.04 [sigernetwork.com]
Tutorial Lengkap Instalasi ubuntu server 12.04 [sigernetwork.com]
 
Tutorial Cara Instalasi Ubuntu Linux Lengkap
Tutorial Cara Instalasi Ubuntu Linux LengkapTutorial Cara Instalasi Ubuntu Linux Lengkap
Tutorial Cara Instalasi Ubuntu Linux Lengkap
 
OPTIMASI PENJADWALAN MATA KULIAH DENGAN MENGGUNAKAN ALGORITMA GENETIKA (STUDI...
OPTIMASI PENJADWALAN MATA KULIAH DENGAN MENGGUNAKAN ALGORITMA GENETIKA (STUDI...OPTIMASI PENJADWALAN MATA KULIAH DENGAN MENGGUNAKAN ALGORITMA GENETIKA (STUDI...
OPTIMASI PENJADWALAN MATA KULIAH DENGAN MENGGUNAKAN ALGORITMA GENETIKA (STUDI...
 
Mahir administrasi server dan router ubuntu server
Mahir administrasi server dan router ubuntu serverMahir administrasi server dan router ubuntu server
Mahir administrasi server dan router ubuntu server
 
Laporan Installasi ubuntu server
Laporan Installasi ubuntu serverLaporan Installasi ubuntu server
Laporan Installasi ubuntu server
 
2013 12. Administrasi Server Linux Ubuntu
2013 12. Administrasi Server Linux Ubuntu2013 12. Administrasi Server Linux Ubuntu
2013 12. Administrasi Server Linux Ubuntu
 
Penerapan Web 2.0 di Perpustakaan
Penerapan Web 2.0 di PerpustakaanPenerapan Web 2.0 di Perpustakaan
Penerapan Web 2.0 di Perpustakaan
 
Ubuntu server-904 membuat-server_dengan_ubuntu
Ubuntu server-904 membuat-server_dengan_ubuntuUbuntu server-904 membuat-server_dengan_ubuntu
Ubuntu server-904 membuat-server_dengan_ubuntu
 

Similar to Tutorial Cara Membuat Aplikasi RSS Android - creatorb

Membuathalutamaeclipse
MembuathalutamaeclipseMembuathalutamaeclipse
Membuathalutamaeclipse
seffy kusuma
 
Laporan pembuatan aplikasi my so untuk android ppt
Laporan pembuatan aplikasi my so untuk android pptLaporan pembuatan aplikasi my so untuk android ppt
Laporan pembuatan aplikasi my so untuk android pptWahyu Anggara
 
Laporan pembuatan aplikasi my so untuk android ppt
Laporan pembuatan aplikasi my so untuk android pptLaporan pembuatan aplikasi my so untuk android ppt
Laporan pembuatan aplikasi my so untuk android ppt
Wahyu Anggara
 
Membuat mvc framework sederhana dengan php
Membuat mvc framework sederhana dengan phpMembuat mvc framework sederhana dengan php
Membuat mvc framework sederhana dengan phpCahya Dwiana SN
 
Pemrograman android
Pemrograman androidPemrograman android
Pemrograman android
MIqbalNasution
 
Pemrograman Dasar Android
Pemrograman Dasar AndroidPemrograman Dasar Android
Pemrograman Dasar Android
Abas Djumadi
 
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSONTutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Dimas Prawira
 
Chapt 03 layouting dan desain antarmuka &amp; input kontrol dan android widget
Chapt 03 layouting dan desain antarmuka &amp; input kontrol dan android widgetChapt 03 layouting dan desain antarmuka &amp; input kontrol dan android widget
Chapt 03 layouting dan desain antarmuka &amp; input kontrol dan android widget
Edi Faizal
 
Belajar membuat modul crud di laravel 5
Belajar membuat modul crud di laravel 5Belajar membuat modul crud di laravel 5
Belajar membuat modul crud di laravel 5
Welly Rosadi, Mochamad
 
Jamal aplikasicrud
Jamal aplikasicrudJamal aplikasicrud
Jamal aplikasicrudmales Aja
 
Membuat spinner array pada adt
Membuat spinner array pada adtMembuat spinner array pada adt
Membuat spinner array pada adt
iswan_di
 
Jeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic ServletsJeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic ServletsIndividual Consultants
 
Mari belajar vue js
Mari belajar vue jsMari belajar vue js
Mari belajar vue js
Teten Nugraha
 
Introduction on Android programming Tutorial
Introduction on Android programming TutorialIntroduction on Android programming Tutorial
Introduction on Android programming Tutorial
Dimas Prawira
 
15. lampiran listing program
15. lampiran   listing program15. lampiran   listing program
15. lampiran listing program
Faza Zahrah
 
Praktikum 10
Praktikum 10Praktikum 10
Praktikum 10
AwangHerlambang
 
Modul praktikum 5 - Android Sudaryatno
Modul praktikum 5 - Android SudaryatnoModul praktikum 5 - Android Sudaryatno
Modul praktikum 5 - Android Sudaryatno
Yatno Sudar
 
Pengembangan aplikasi mobile learning menggunakan Intel XDK
Pengembangan aplikasi mobile learning menggunakan Intel XDKPengembangan aplikasi mobile learning menggunakan Intel XDK
Pengembangan aplikasi mobile learning menggunakan Intel XDK
Gilang Aziz
 
Web gis peta interaktif jumlah penduduk
Web gis peta interaktif jumlah pendudukWeb gis peta interaktif jumlah penduduk
Web gis peta interaktif jumlah penduduk
Mansur Muchtar
 
Modul Intel XDK Workshop ver 1.0 Sept 2013 - Modul 4 - Pengembangan Aplikasi ...
Modul Intel XDK Workshop ver 1.0 Sept 2013 - Modul 4 - Pengembangan Aplikasi ...Modul Intel XDK Workshop ver 1.0 Sept 2013 - Modul 4 - Pengembangan Aplikasi ...
Modul Intel XDK Workshop ver 1.0 Sept 2013 - Modul 4 - Pengembangan Aplikasi ...
Muhammad Yusuf
 

Similar to Tutorial Cara Membuat Aplikasi RSS Android - creatorb (20)

Membuathalutamaeclipse
MembuathalutamaeclipseMembuathalutamaeclipse
Membuathalutamaeclipse
 
Laporan pembuatan aplikasi my so untuk android ppt
Laporan pembuatan aplikasi my so untuk android pptLaporan pembuatan aplikasi my so untuk android ppt
Laporan pembuatan aplikasi my so untuk android ppt
 
Laporan pembuatan aplikasi my so untuk android ppt
Laporan pembuatan aplikasi my so untuk android pptLaporan pembuatan aplikasi my so untuk android ppt
Laporan pembuatan aplikasi my so untuk android ppt
 
Membuat mvc framework sederhana dengan php
Membuat mvc framework sederhana dengan phpMembuat mvc framework sederhana dengan php
Membuat mvc framework sederhana dengan php
 
Pemrograman android
Pemrograman androidPemrograman android
Pemrograman android
 
Pemrograman Dasar Android
Pemrograman Dasar AndroidPemrograman Dasar Android
Pemrograman Dasar Android
 
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSONTutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
 
Chapt 03 layouting dan desain antarmuka &amp; input kontrol dan android widget
Chapt 03 layouting dan desain antarmuka &amp; input kontrol dan android widgetChapt 03 layouting dan desain antarmuka &amp; input kontrol dan android widget
Chapt 03 layouting dan desain antarmuka &amp; input kontrol dan android widget
 
Belajar membuat modul crud di laravel 5
Belajar membuat modul crud di laravel 5Belajar membuat modul crud di laravel 5
Belajar membuat modul crud di laravel 5
 
Jamal aplikasicrud
Jamal aplikasicrudJamal aplikasicrud
Jamal aplikasicrud
 
Membuat spinner array pada adt
Membuat spinner array pada adtMembuat spinner array pada adt
Membuat spinner array pada adt
 
Jeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic ServletsJeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic Servlets
 
Mari belajar vue js
Mari belajar vue jsMari belajar vue js
Mari belajar vue js
 
Introduction on Android programming Tutorial
Introduction on Android programming TutorialIntroduction on Android programming Tutorial
Introduction on Android programming Tutorial
 
15. lampiran listing program
15. lampiran   listing program15. lampiran   listing program
15. lampiran listing program
 
Praktikum 10
Praktikum 10Praktikum 10
Praktikum 10
 
Modul praktikum 5 - Android Sudaryatno
Modul praktikum 5 - Android SudaryatnoModul praktikum 5 - Android Sudaryatno
Modul praktikum 5 - Android Sudaryatno
 
Pengembangan aplikasi mobile learning menggunakan Intel XDK
Pengembangan aplikasi mobile learning menggunakan Intel XDKPengembangan aplikasi mobile learning menggunakan Intel XDK
Pengembangan aplikasi mobile learning menggunakan Intel XDK
 
Web gis peta interaktif jumlah penduduk
Web gis peta interaktif jumlah pendudukWeb gis peta interaktif jumlah penduduk
Web gis peta interaktif jumlah penduduk
 
Modul Intel XDK Workshop ver 1.0 Sept 2013 - Modul 4 - Pengembangan Aplikasi ...
Modul Intel XDK Workshop ver 1.0 Sept 2013 - Modul 4 - Pengembangan Aplikasi ...Modul Intel XDK Workshop ver 1.0 Sept 2013 - Modul 4 - Pengembangan Aplikasi ...
Modul Intel XDK Workshop ver 1.0 Sept 2013 - Modul 4 - Pengembangan Aplikasi ...
 

Tutorial Cara Membuat Aplikasi RSS Android - creatorb

  • 1. Tutorial Membuat Aplikasi Android Implementation RSS Feed Parser creatorb dev
  • 2. Tujuan Membuat aplikasi android dengan konsep penampil media informasi, dimana aplikasi yang akan dibuat ini adalah menampilkan artikel artikel islami yang dimuat dalam web muslim.or.id dan untuk menampilkan saluran berita lain bisa kita rubah target url nya sesuai yang di kehendaki. Materi i. Membuat splashscreen. ii. Membuat listview. iii. Load data mengguanakan http request. iv. Membuat tombol style refresh. v. Memparsing dan mengolah data. vi. Menampilkan data pada webview. Persiapan  Tool : Android sdk + eclipse (ADT)  OS : ubuntu precise pangolin 12.04 (optional)  JAVA 8 (optional)
  • 3. Pembahasan 1) Pertama persiapkan pembuatan project dengan membuat project baru File > New > Android Applications Project , disini saya isi dengan nama MuslimNews. Dan selebihnya anda bisa menyesuaikan sendiri kustomisasi icon dan nama class activitynya. 2) Selanjutnya kita akan membuat splash screen adapun properti yang diperlukan untuk berjalannya splashscreen yang dibuat ini adalah sbb: View : - splash.xml ­main. xml ­alpha. xml ­translate. xml Controler : ­Splash. java Other : ­Androidmanifest. xml ­image splash drawable.
  • 4. Berikut kodingannya: splash.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/splashscreen" > //set gambar splash < FrameLayou t android:id="@+id/FrameLayout1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" > <ProgressBar android:id="@+id/progressBar1" style="?android:attr/progressBarStyleSmall" android:layout_width="109dp" android:layout_height="105dp" android:layout_gravity="center" /> </FrameLayout> </RelativeLayout> Setelah file splash telah dibuat selanjutnya, membuat style animasi nya. Buat folder anim di /res dan selanjutnya dalam folder /res/anim maka isi dengan dua file berikut ini. alpha.xml dan translate.xml dalam fungsinya alpha untuk memberikan efek fade in sedangkan translate akan memberikan efek animasi singkap dari bawah ke atas. alpha.xml <?xml version="1.0" encoding="utf-8"?> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="3100" /> translate.xml <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android">
  • 5. <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="0%" android:toXDelta="0%" android:fromYDelta="200%" android:toYDelta="0%" android:duration="2000" android:zAdjustment="top" /> </set> selanjutnya adalah class Splash.java disini saya memasukakkan class nya pada package id.creatorb.muslimnews.splashscreen untuk lebih terstruktur. package id.creatorb.muslimnews.splashscreen; import id.creatorb.muslimnews.R; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.MotionEvent; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.FrameLayout; import android.widget.ProgressBar; public class Splash extends Activity { protected boolean _active = true; protected int _splashTime = 5000; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.splash); StartAnimations();//Menjalankan Method Start Animasi Thread splashThread = new Thread() { //Timer Splash public void run() { try{ int waited = 0; while(_active && (waited < _splashTime)) { sleep(700); if(_active) { waited += 700; } } } catch(InterruptedException e) { // do nothing } finally { finish();
  • 6. Intent newIntent=new Intent(Splash.this, id.creatorb.muslimnews.activity.MainActivity.class);//pindah Activity Main startActivityForResult(newIntent,0); } } }; splashThread.start(); } @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { _active = false; } return true; } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.splash, menu); return true; } //Disini Deklarasi Animasinya(StartAnimation) private void StartAnimations() { // TODO Auto-generated method stub //Animasi untuk Frame Layout mengunakan alpha.xml Animation anim = AnimationUtils.loadAnimation(this, R.anim.alpha); anim.reset(); FrameLayout l=(FrameLayout) findViewById(R.id.FrameLayout1); l.clearAnimation(); l.startAnimation(anim); //Animasi untuk ProgressBar1 mengunakan alpha.xml Animation anim1 = AnimationUtils.loadAnimation(this, R.anim.alpha); anim1.reset(); ProgressBar l1=(ProgressBar) findViewById(R.id.progressBar1); l1.clearAnimation(); l1.startAnimation(anim); } } Bisa dilihat dalam intent terdapat kodingan seperti ini, Intent newIntent=new Intent(Splash.this, id.creatorb.muslimnews.activity.MainActivity.class); dengan pengertian sebenarnya merupakan intent untuk perpindahan dari class Splash menuju class MainActivity ketika paramater waktu yang ditentukan telah habis. Dan gambar dibawah ini adalah tampilan splashscreen yang dibuat dengan menampilkan file gambar pada /drawable/splashscreen.png
  • 7. Selanjutnya tampilan menu, dimana dalam tampilan menunya menggunakan ListView yang memuat short list artikel dari web muslim.or.id . Dalam tampilan ListView sendiri memuat 3 komponen diantaranya ImageView (menampilkan logo muslim.or.id) , kemudian judul artikel/berita yang dimuat, selanjutnya tanggal artikel tersebut di posting. Lebih jelasnya gambarnya seperti dibawah ini:
  • 8. Seperti gambar di atas, menyesuaikan ListView dengan komponen lainnya Android. Pertama, tambahkan ImageView di sebelah kiri setiap item ListView. Kemudian, menambahkan dua TextView sejajar dengan komponen gambar. Untuk teks seperti screenshoot di atas, di format dengan gaya teks dengan huruf besar dan 2 baris. Untuk teks bagian bawah, dibuat font lebih kecil dari yang atas. Lebih singkatnya dalam tata letak layout.xml ini, saya menambahkan satu ImageView dan dua TextView di RelativeLayout. Berikut kodingannya: list_item_artikel.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingBottom="5dp" android:paddingLeft="16dp" android:paddingRight="16dp" android:paddingTop="5dp" android:background="#00BFFF">
  • 9. < ImageVie w android:id="@+id/postThumb" android:layout_width="60dp" android:layout_height="60dp" android:layout_marginRight="5dp" android:scaleType="centerCrop" android:src="@drawable/muslim_logo_creatorb" /> <TextView android:id="@+id/postTitleLabel" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignTop="@id/postThumb" android:layout_toRightOf="@id/postThumb" android:ellipsize="end" android:maxLines="2" android:tex t = "Post Box " android:textIsSelectable = "false " android:textSize="16sp" /> <TextView android:id="@+id/postDateLabel" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_alignBottom="@id/postThumb" android:layout_alignParentRight="true" android:layout_toRightOf="@id/postThumb" android:maxLines="1" android:text = "Nov 10, 2014 " android:textSize="12sp" /> </RelativeLayout> Kemudian membuat nilai object baru untuk menahan semua data postingan baru yang diambil pada web melalui rss. PostData.java package id.creatorb.muslimnews.activity.post; public class PostData { public String postThumbUrl; public String postTitle; public String postDate; public String postLink; public String postContent; public String postGuid; Kemudian selanjutnya untuk menampilkan data lengkap pada masing masing listview membutuhkan adapater class untuk mewariskan data dari ArrayAdapter dan override dari fungsi getView untuk ditampilkan pada sebuah list.
  • 10. Pada teknik listview seringkali kita dibentrokan dengan beban load yang besar dikarenakan penerimaan data dari server yang disimpan pada adapter dan semakin lama semakin overload. Maka untuk meningkatkan kinerjanya digunakan metode getView dari data muat ulang dan tidak juga mengguanakan findViewbyId melainkan view holder untuk menampilkannnya secara langsung tanpa mencari permasing masing id nya. Berikut kodenya: DaftarPostAdapter.java package id.creatorb.muslimnews.activity.adapter; import id.creatorb.muslimnews.activity.post.PostData; import java.util.ArrayList; import id.creatorb.muslimnews.R; import android.app.Activity; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; public class DaftarPostAdapter extends ArrayAdapter<PostData> { private LayoutInflater inflater; private ArrayList<PostData> datas; public DaftarPostAdapter(Context context, int textViewResourceId, ArrayList<PostData> objects) { super(context, textViewResourceId, objects); // TODO Auto-generated constructor stub inflater = ((Activity) context).getLayoutInflater(); datas = objects; } static class ViewHolder { TextView postTitleView; TextView postDateView; ImageView postThumbView; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { convertView = inflater.inflate(R.layout.list_item_artikel, null); viewHolder = new ViewHolder(); viewHolder.postThumbView = (ImageView) convertView .findViewById(R.id.postThumb);
  • 11. viewHolder.postTitleView = (TextView) convertView .findViewById(R.id.postTitleLabel); viewHolder.postDateView = (TextView) convertView .findViewById(R.id.postDateLabel); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } if (datas.get(position).postThumbUrl == null) { viewHolder.postThumbView .setImageResource(R.drawable.muslim_logo_creato rb); } viewHolder.postTitleView.setText(datas.get(position).postTitle); viewHolder.postDateView.setText(datas.get(position).postDate); return convertView;} } Selanjutnya adalah teknik pengambilan data melaui http request. Jika kita menggunakan teknik http request tanpa mempertimbangkan keefesiensitas maka bisa dipastikan aplikasi kita akan terlihat hank/freeze/macet dalam memuat content dari sebuah web karena dalam permintaan data pada sebuah jaringan server membutuhkan konektifitas yang stabil dan waktu tersendiri jika tidak ditangani dengan baik maka hal pertama yang terjadi pada user interface kita adalah blank sampai proses permintaan terpenuhi karena tidak ada aktifitas yang dilakukan di layar karena sedang menangani proses pengambilan data dari server. Menyiasati hal ini kita bisa melakukan aktifitas tersebut di belakang layar, baik bisa menggunanakan thread ataupun AsyncTask lalu apa perbedaan dari keduanya ? Dan mana yang harus di pilih ? Itu bisa disesuaikan dengan anda sendiri karena Sayangnya, menggunakan thread dapat membuat kode anda lebih rumit dan lebih sulit untuk dibaca. Untuk membebaskan masalah ini, saya sarankan untuk menggunakan AsyncTask sebagai gantinya. Pada dasarnya AsyncTask hanya dapat digunakan oleh subclass. Oleh karena itu, saya akan membuat subclass dari AsyncTask di kelas MainActivity, dan melaksanakan permintaan HTTP dalam subclass. Seperti kode dibawah ini: private class HTTPDownloadTask extends AsyncTask<String, Integer, PostData[]> { @Override protected PostData[] doInBackground(String... params) { // TODO Auto-generated method stub String urlStr = params[0]; InputStream is = null;
  • 12. try { URL url = new URL(urlStr); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setReadTimeout(10*1000); connection.setConnectTimeout(10*1000); connection.setRequestMethod("GET"); connection.setDoInput(true); connection.connect(); int response = connection.getResponseCode(); Log.d("debug", "The response is: " + response); is = connection.getInputStream(); //read string final int bufferSize = 1024; byte[] buffer = new byte[1024]; ByteArrayOutputStream os = new ByteArrayOutputStream(); while(true) { int count = is.read(buffer, 0, bufferSize); if(count == -1) { break; } os.write(buffer); } os.close(); String result = new String(os.toByteArray(), "UTF-8"); Log.d("debug", result); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } } Kemudian selanjutnya adalah memparsingnya, Dalam sampel kode diatas, saya menggunakan HttpURLConnection untuk men­download data dari url. Kemudian, saya menggunakan ByteArrayOutputStream untuk membaca semua data dari InputStream. Untuk tujuan debug, saya mencetak data ke Log konsol. Setelah kita mendapatkan data rss feed dari situs web, kita akan mengurai RSS Feed xml untuk menjadikan ViewList, sedangkan untuk mengurai format data XML di Android, menggunakan XmlPullParser, itu adalah XML mesin parse yang direkomendasikan oleh situs Developer Android. Hal ini dapat mengurai XML dalam cara yang efisien dan dipertahankan pada Android. Selain itu, kita juga bisa memilih KXmlParser via XmlPullParserFactory.newPullParser () atau ExpatPullParser via Xml.newPullParser ().
  • 13. Entah xml parser dapat bekerja dengan baik. Dalam situs pengembang Android, sudah memberikan contoh untuk menunjukkan bagaimana mengurai xml oleh ExpatPullParser. Dan berikut contoh konsep dalam aplikasi ini : XmlPullParserFactory factory = XmlPullParserFactory .newInstance(); factory.setNamespaceAware(true); XmlPullParser xpp = factory.newPullParser(); xpp.setInput(is, null); int eventType = xpp.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_DOCUMENT) { //mulai parsing } else if (eventType == XmlPullParser.START_TAG) { //cari permulaan tag } else if (eventType == XmlPullParser.END_TAG) { //caria khir tag } else if (eventType == XmlPullParser.TEXT) { //cari text diantara tag } eventType = xpp.next(); } Dan untuk penerapan dari beberapa konsep diatas ada pada MainActivity.java dengan beberapa kode berikut: private class RssDataController extends AsyncTask<String, Integer, ArrayList<PostData>> { private RSSXMLTag currentTag; @Override protected ArrayList<PostData> doInBackground(String... params) { // TODO Auto-generated method stub String urlStr = params[0]; InputStream is = null; ArrayList<PostData> postDataList = new ArrayList<PostData>(); try { URL url = new URL(urlStr); HttpURLConnection connection = (HttpURLConnection) url .openConnection(); connection.setReadTimeout(10 * 1000); connection.setConnectTimeout(10 * 1000); connection.setRequestMethod("GET"); connection.setDoInput(true); connection.connect(); int response = connection.getResponseCode(); Log.d("debug", "The response is: " + response); is = connection.getInputStream();
  • 14. // parse xml XmlPullParserFactory factory = XmlPullParserFactory .newInstance(); factory.setNamespaceAware(true); XmlPullParser xpp = factory.newPullParser(); xpp.setInput(is, null); int eventType = xpp.getEventType(); PostData pdData = null; SimpleDateFormat dateFormat = new SimpleDateFormat( "EEE, DD MMM yyyy HH:mm:ss", Locale.US); while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_DOCUMENT) { } else if (eventType == XmlPullParser.START_TAG) { if (xpp.getName().equals("item")) { pdData = new PostData(); currentTag = RSSXMLTag.IGNORETAG; } else if (xpp.getName().equals("title")) { currentTag = RSSXMLTag.TITLE; } else if (xpp.getName().equals("link")) { currentTag = RSSXMLTag.LINK; } else if (xpp.getName().equals("pubDate")) { currentTag = RSSXMLTag.DATE; } else if (xpp.getName().equals("encoded")) { currentTag = RSSXMLTag.CONTENT; } else if (xpp.getName().equals("guid")) { currentTag = RSSXMLTag.GUID; } } else if (eventType == XmlPullParser.END_TAG) { if (xpp.getName().equals("item")) { // format data disini // dan lainnya pada adapter Date postDate = dateFormat.parse(pdData.postDate); pdData.postDate = dateFormat.format(postDate); postDataList.add(pdData); } else { currentTag = RSSXMLTag.IGNORETAG; } } else if (eventType == XmlPullParser.TEXT) { String content = xpp.getText(); content = content.trim(); if (pdData != null) { switch (currentTag) { case TITLE: if (content.length() != 0) { if (pdData.postTitle != null) { pdData.postTitle += content; else { pdData.postTitle = content; } }b reak; case LINK:
  • 15. if (content.length() != 0) { if (pdData.postLink != null) { pdData.postLink += content; else { pdData.postLink = content; } }b reak; case DATE: if (content.length() != 0) { if (pdData.postDate != null) { pdData.postDate += content; else { pdData.postDate = content; } }b reak; case CONTENT: if (content.length() != 0) { if (pdData.postContent != null) { pdData.postContent += content; else { pdData.postContent = content; } }b reak; case GUID: if (content.length() != 0) { if (pdData.postGuid != null) { pdData.postGuid += content; else { pdData.postGuid = content; } }b reak; default: break; } } } eventType = xpp.next(); } Log.v("tst", String.valueOf((postDataList.size()))); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); }
  • 16. return postDataList; } @Override protected void onPostExecute(ArrayList<PostData> result) { // TODO Auto-generated method stub boolean isupdated = false; for (int i = 0; i < result.size(); i++) { //cek apakah post telah ada pada list if (guidList.contains(result.get(i).postGuid)) { continue; } else { isupdated = true; guidList.add(result.get(i).postGuid); } if (isRefreshLoading) { listData.add(i, result.get(i)); } else { listData.add(result.get(i)); } } if (isupdated) { postAdapter.notifyDataSetChanged(); } isLoading = false; if (isRefreshLoading) { postListView.onRefreshComplete(); } else { postListView.onLoadingMoreComplete(); } super.onPostExecute(result); } } Untuk kelengkapan kodenya bisa di cek pada source code yang disediakan. Setelah listview selesai seharusnya kita melanjutkan pada pembahasan content, namun ada tidak langsung kesana karena ada fitur tersembunyi yang perlu dijelaskan disini ya itu adalah fitur refresh untuk memuat ulang dan mengambil data yang belum tersedia pada device dari server, dalam fitur refresh salah satunya yang dipakai untuk aplikasi ini adalah drag refresh, dimana permintaan refresh akan dilakukan dengan drag (menarik) layar ke arah bawah. Pertama­tama, kita akan menginisialisasi tampilan judul dalam constructor. Pada tampilan header, ada gambar panah, progress bar dan dua kotak teks. Seperti gambar dibawah.
  • 17. Dan kodingannya sebagai berikut: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingBottom="10dp" android:paddingLeft="20dp" > < RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" tools:context=".MainActivity" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:gravity="center_horizontal" android:minWidth="200dp" android:orientation="vertical" android:paddingLeft="10dp" > <TextView android:id="@+id/head_tipsTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/pull_to_refresh" android:textSize="15sp" />
  • 18. <TextView android:id="@+id/head_lastUpdatedDateTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/pull_to_refresh" android:textSize="12sp" /> </LinearLayout> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_toLeftOf="@+id/linearLayout1" android:minHeight="30dp" android:minWidth="30dp" > <ImageView android:id="@+id/head_arrowImageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:contentDescription="@string/head_arrowImage" android:src="@drawable/refresh_creatorb" /> <ProgressBar android:id="@+id/head_progressBar" style="?android:attr/progressBarStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:visibility="gone" /> </FrameLayout> </RelativeLayout> </LinearLayout> Dan ini adalah inisialisasi tampilan judul di listview: private void init(Context context) { inflater = LayoutInflater.from(context); headerRelativeLayout = (RelativeLayout)inflate(context, R.layout.refresh_header_view, null); arrowImage = (ImageView)headerRelativeLayout.findViewById(R.id.head_arrowImageView); progressBar = (ProgressBar)headerRelativeLayout.findViewById(R.id.head_progressBar); headerTextView = (TextView)headerRelativeLayout.findViewById(R.id.head_tipsTextView); lastUpdateDateTextView = (TextView)headerRelativeLayout.findViewById(R.id.head_lastUpdatedDateTextView)
  • 19. ; headerRelativeLayout.setPadding(0, -1 * HEADER_HEIGHT, 0, 0); this.addHeaderView(headerRelativeLayout, null, false); } Dalam metode fungsi onTouchEvent, bisamenangani interaksi pengguna, seperti sentuhan, tarik ke bawah, dan lepaskan. Bisa dilihat dalam tiga MotionEvent diantaranya Setelah pengguna menyentuh layar, event ACTION_DOWN trigger. Dalam keadaan ini, dimulai untuk merecord titik awal dari mana pengguna mulai menarik ListView, Kemudian ketika pengguna sedang menarik ListView, event ACTION_MOVE trigger. Dalam keadaan ini, akan mengubah header tampilan atas untuk menunjukkan indikator refresh selanjutnya setelah pengguna event ACTION_UP trigger. Akan memeriksa header dari tampilan judul dan mengeksekusi perintah apakah menjalankan fungsi refresh atau tidak. Contoh sederhanya berikut: @Override public boolean onTouchEvent(MotionEvent ev) { // TODO Auto-generated method stub switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: //jikaDidrag = true; startY = ev.getY(); break; case MotionEvent.ACTION_MOVE: if (!isLoading) { deltaY = ev.getY() - startY; Log.d("debug", String.valueOf(deltaY)); headerRelativeLayout.setPadding( headerRelativeLayout.getPaddingLeft(), -1 * HEADER_HEIGHT + (int) deltaY, 0, headerRelativeLayout.getPaddingBottom());
  • 20. if(headerRelativeLayout.getPaddingTop() >= HEADER_HEIGHT && currentState == STATE_PULL_TO_REFRESH) { //rubah state currentState = STATE_RELEASE_TO_UPDATE; arrowImage.clearAnimation(); arrowImage.startAnimation(rotateAnimation); headerTextView.setText(R.string.release_to_refresh); } else if (headerRelativeLayout.getPaddingTop() < HEADER_HEIGHT && currentState == STATE_RELEASE_TO_UPDATE) { currentState = STATE_PULL_TO_REFRESH; arrowImage.clearAnimation(); arrowImage.startAnimation(reverseRotateAnimation); headerTextView.setText(R.string.pull_to_refresh); } } break; case MotionEvent.ACTION_UP: //jikaDiDrag = false; if (!isLoading) { if (headerRelativeLayout.getPaddingTop() < HEADER_HEIGHT) { // kembali headerRelativeLayout.setPadding( headerRelativeLayout.getPaddingLeft(), -1 * HEADER_HEIGHT, 0, headerRelativeLayout.getPaddingBottom()); } else { // maka masuk pada HEADER_HEIGHT dan mulai berjalan headerRelativeLayout.setPadding( headerRelativeLayout.getPaddingLeft(), HEADER_TOP, 0,
  • 21. headerRelativeLayout.getPaddingBottom()); headerTextView.setText(R.string.loading); progressBar.setVisibility(View.VISIBLE); arrowImage.clearAnimation(); arrowImage.setVisibility(View.GONE); isLoading = true; //mulai loading if (refreshDelegate != null) { refreshDelegate.startFresh(); } } } break; default: break; } return super.onTouchEvent(ev); } Selain header juga ada footer yang berfungsi untuk mengirim permintaan data pada server namun tidak seperti di header yang selalu meminta data baru di server melainkan data lama yang belum tersedia di listview dan ketika field tesebut di klik maka akan meload data postingan lama/sebelumnya. Pembahasan terakhir adalah webview, dimana saat kita memilih salah satu artikel yang terdapat pada listview maka selanjutnya system akan membawa anda tidak langsung menuju browser, melainkan tetap berjalan dalam aplikasi. Hal ini bisa dilakukan dengan menerapkan metode webview.
  • 22. Hal tersebut dilakukan dengan menyisipkan OnItemClickListener pada list item artikel, postListView.setOnItemClickListener(onItemClickListener); Dan selanjutnya adalah interface untuk merespon dan menangani perintah tersebut, lebih jelasnya berikut: private OnItemClickListener onItemClickListener = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub
  • 23. PostData data = listData.get(arg2 - 1); Bundle postInfo = new Bundle(); postInfo.putString("content", data.postContent); Intent postviewIntent = new Intent(MainActivity.this, LihatPost.class); postviewIntent.putExtras(postInfo); startActivity(postviewIntent); } }; Diatas bisa dilihat penerapan Onclick listener pada item di listview. Kemudian, kita instantiate Activity Intent baru dan meneruskan data ke activity dengan Bundle. Selanjutnya panggil startActivity untuk beralih ke Activity baru yaitu LihatPost.java dimana activity tersebut adalah class untuk menampilkan webview berikut kodenya: package id.creatorb.muslimnews.activity; import id.creatorb.muslimnews.R; import android.app.Activity; import android.os.Bundle; import android.webkit.WebView; public class LihatPost extends Activity { private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); this.setContentView(R.layout.postview); Bundle bundle = this.getIntent().getExtras(); String postContent = bundle.getString("content"); webView = (WebView)this.findViewById(R.id.webview); webView.loadData(postContent, "text/html; charset=utf-8","utf-8"); } } Perhatikan kode diatas, kita mendapat data dari Bundle yang dilalui oleh activity sebelumnya. Setelah mendapatkan parsing RSS nya maka dengan web view load data ini lah yang membuat kita bisa menampilkan pada layout content dengan format text/html.
  • 24. For more tutorials you can subscribe me. RSS Feed tut's : https://www.youtube.com/watch?v=YGsNAyafHI0 creatorb