メニュー
E-Mail
|
RSSリーダを作る
RSSを読み込んで、ListViewに表示します。
● ListViewのカスタマイズ
レイアウトファイル(rss_list.xml)を作成します。
タイトルと要約を表示するTextViewを配置します。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text="TextView" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView1"
android:text="TextView" />
</RelativeLayout>
|
● ItemBean
RSSの内容を格納するBeanを作成します。
タイトルと要約を格納します。
public class ItemBean {
private String title;
private String summary;
public void setTitle(String title) {
this.title = title;
}
public void setSummary(String summary) {
this.summary = summary;
}
public String getTitle() {
return this.title;
}
public String getSummary() {
return this.summary;
}
}
|
● Adapter
ArrayAdapterを継承したクラスを作成します。
getViewでタイトルと要約を表示するように実装します。
import java.util.List;
import android.content.ClipData.Item;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class RssAdapter extends ArrayAdapter<ItemBean> {
private LayoutInflater inflater;
public RssAdapter(Context context, int id, List<Item> items) {
super(context, id);
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public View getView(int position, View view,ViewGroup parent){
if(view == null){
view = inflater.inflate(R.layout.rss_llist, null);
}
ItemBean item = this.getItem(position);
if(item != null){
TextView titleText = (TextView)view.findViewById(R.id.textView1);
titleText.setText(item.getTitle());
TextView contentsText = (TextView)view.findViewById(R.id.textView2);
contentsText.setText(item.getSummary());
}
return view;
}
}
|
● AsyncTask
AsyncTaskを継承したクラスを作成します。
RSSを読み込んで、Adapterクラスを作成し、
ListViewに設定します。
import java.io.InputStream;
import java.net.URL;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
import org.xmlpull.v1.XmlPullParser;
import android.os.AsyncTask;
import android.util.Xml;
import android.widget.ListView;
public class RssAsyncTask extends AsyncTask<String, Integer, RssAdapter> {
private ListView listView;
private RssAdapter rssAdapter;
public RssAsyncTask(ListView listView,RssAdapter rssAdapter) {
this.listView = listView;
this.rssAdapter = rssAdapter;
}
@Override
protected RssAdapter doInBackground(String... arg0) {
String url = "http://blog.nogizaka46.com/atom.xml";
DefaultHttpClient client = new DefaultHttpClient();
HttpUriRequest req = new HttpGet(url);
HttpResponse res = null;
try {
res = client.execute(req);
XmlPullParser xmlPullParser = Xml.newPullParser();
xmlPullParser.setInput(res.getEntity().getContent(),"UTF-8");
ItemBean item = null;
for(int e = xmlPullParser.getEventType(); e != XmlPullParser.END_DOCUMENT; e = xmlPullParser.next()){
if (e == XmlPullParser.START_TAG) {
if (xmlPullParser.getName().equals("entry")) {
item = new ItemBean();
}
if (xmlPullParser.getName().equals("title")) {
if (item != null) item.setTitle(xmlPullParser.nextText());
}
if (xmlPullParser.getName().equals("summary")) {
if (item != null) item.setSummary(xmlPullParser.nextText());
}
}
if (e == XmlPullParser.END_TAG && xmlPullParser.getName().equals("entry")) {
rssAdapter.add(item);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return rssAdapter;
}
@Override
protected void onPostExecute(RssAdapter res) {
listView.setAdapter(res);
}
}
|
● Activity
作成したAsyncTaskを継承したクラス(RssAsyncTask)を生成し、実行します。
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ListView;
public class RssReaderActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rss_reader);
ArrayList items = new ArrayList();
RssAdapter rssAdapter = new RssAdapter(this, R.layout.rss_llist,items);
ListView listView = (ListView)findViewById(R.id.listView1);
RssAsyncTask rssAsyncTask = new RssAsyncTask(listView,rssAdapter);
rssAsyncTask.execute("");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_rss_reader, menu);
return true;
}
}
|
|
|