ぱんぶろ

パンジーの「いいね!」ブログ

[Androidアプリ開発(完結)]2chまとめアプリ作成への道⑥~ITproのソースをちょっとイジる(記事リンク編)~

      2016/03/30  

2chmatome

前回は、レイアウトに合わせてアプリのロジックを修正しました。
(⇒ITproのソースをちょっとイジる(ロジック編)

あとは記事を選択した時に該当のリンク先に飛ばすだけです!

なので今回は2chまとめアプリ作成への道の第6弾、もとい『完結編』として、
アプリ内で記事リンク先へ画面遷移するロジックを追加します。

スポンサード リンク

ITproのソースをちょっとイジる(記事リンク編)

修正するファイルは

  • 「Item.java」
  • 「RssParserTask.java」
  • 「RssReaderActivity.java」
  • 「item_detail.xml」
  • 「ItemDetailActivity.java」

の5つです。
(わりとありました・・・。)
ハリキッていきましょう!

「Item.java」ファイルの変更

記事ページへ遷移するには、記事のURLが必要になります。
まずは、そのための型を準備しておきます。

【修正後】

package jp.co.nikkeibp.itpro.rssreader;

// Item.java
public class Item {
	// 記事のタイトル
	private CharSequence mTitle;
	// 記事のサイト名
	private CharSequence mSite;
	// 記事の更新日
	private CharSequence mDate;
	// 記事のリンク
	private CharSequence mLink;
	// 記事の本文
//	private CharSequence mDescription;

	public Item() {
		mTitle = "";
//		mDescription = "";
	}

//	public CharSequence getDescription() {
//		return mDescription;
//	}
//
//	public void setDescription(CharSequence description) {
//		mDescription = description;
//	}

	public CharSequence getTitle() {
		return mTitle;
	}

	public void setTitle(CharSequence title) {
		mTitle = title;
	}

	public CharSequence getSite() {
		return mSite;
	}

	public void setSite(CharSequence site) {
		mSite = site;
	}

	public CharSequence getDate() {
		return mDate;
	}

	public void setDate(CharSequence date) {
		mDate = date;
	}

	public CharSequence getLink() {
		return mLink;
	}

	public void setLink(CharSequence link) {
		mLink = link;
	}
}

 

「RssParserTask.java」ファイルの変更

RSSフィード(XMLファイル)から記事URLを取得します。
「parseXmlメソッド」内を修正します。

【修正後】

	// XMLをパースする
	public RssListAdapter parseXml(InputStream is) throws IOException,
			XmlPullParserException {
		XmlPullParser parser = Xml.newPullParser();
		try {
			parser.setInput(is, null);
			int eventType = parser.getEventType();
			Item currentItem = null;
			while (eventType != XmlPullParser.END_DOCUMENT) {
				String tag = null;
				switch (eventType) {
				case XmlPullParser.START_TAG:
					tag = parser.getName();
					if (tag.equals("item")) {
						currentItem = new Item();
					} else if (currentItem != null) {
						if (tag.equals("title")) {
							currentItem.setTitle(parser.nextText());
						} else if (tag.equals("author")) {
							currentItem.setSite((parser.nextText()));
						} else if (tag.equals("pubDate")) {
							currentItem.setDate((parser.nextText()));
						} else if (tag.equals("link")) {
							currentItem.setLink((parser.nextText()));
						}
//						else if (tag.equals("description")) {
//							currentItem.setDescription(parser.nextText());
//						}
					}
					break;
				case XmlPullParser.END_TAG:
					tag = parser.getName();
					if (tag.equals("item")) {
						mAdapter.add(currentItem);
					}
					break;
				}
				eventType = parser.next();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return mAdapter;
	}

 

「RssReaderActivity.java」ファイルの変更

このクラス内では、記事をクリックしたときの処理が記載されています。

現時点では、記事タイトルなどを格納していますが、
これを記事リンク(URL)に変更します。

「onListItemClickメソッド(イベント)」内を修正します。

【修正後】

	// リストの項目を選択した時の処理
	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		Item item = mItems.get(position);
		Intent intent = new Intent(this, ItemDetailActivity.class);
//		intent.putExtra("TITLE", item.getTitle());
//		intent.putExtra("DESCRIPTION", item.getDescription());
		intent.putExtra("LINK", item.getLink());
		startActivity(intent);
	}

 

「item_detail.xml」ファイルの変更

遷移先のレイアウトを変更する必要があります。
アプリ内でWebページを表示させるためには、
「WebView」という要素を使います。

【変更後】

<?xml version="1.0" encoding="utf-8"?>
<!-- item_detail.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <WebView
        android:id="@+id/web"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>

 

「ItemDetailActivity.java」ファイルの変更

このファイルは、記事選択後の遷移先での処理が記載されています。

現時点では、記事タイトルと記事概要だけを表示する処理になっているので、
これを、記事URLのページが表示されるようにします。

【修正後】

package jp.co.nikkeibp.itpro.rssreader;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.webkit.WebView;

//ItemDetailActivity.java
public class ItemDetailActivity extends Activity {
//	private TextView mTitle;
//	private TextView mDescr;
	private WebView mWeb;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.item_detail);

		Intent intent = getIntent();

		String link = intent.getStringExtra("LINK");
		mWeb = (WebView)findViewById(R.id.web);
		mWeb.loadUrl(link);

//		String title = intent.getStringExtra("TITLE");
//		mTitle = (TextView) findViewById(R.id.item_detail_title);
//		mTitle.setText(title);
//		String descr = intent.getStringExtra("DESCRIPTION");
//		mDescr = (TextView) findViewById(R.id.item_detail_descr);
//		mDescr.setText(descr);
	}
}

 

以上です!実際に記事を選択してみましょう。

一覧表示された記事の中から、
任意の記事を選択すると、該当の記事が表示されるようになりました!
2chmatome21

まとめ

今回は、記事を選択した時にリンク先へ遷移するように修正しました。
そして、シリーズ形式で進めてきた2chまとめアプリ作成への道も完結です!

最初から取り組んだ方、おつかれさまでした!!!

この2chまとめアプリは、かなり基本的なものですが、
初心者が扱うにはうってつけの素材かなと思います。

  • レイアウトの勉強にもなるし、
  • 並列処理の勉強にもなるし、
  • リストの勉強にもなるし、
  • イベント処理の勉強にもなります。

コピペするだけでなく、内容を理解すると今後のアプリ開発に役立つかもしれません。
ぜひ、2chまとめアプリをきっかけに色々なアプリ開発にチャレンジしてみてください!

ではでは、
またアプリ関係の記事も書いていきますね。