RSSリーダーを作成する。リストビューとItemを作成

簡単なRSSリーダーを作ってみる:ITpro

の記事を見て、RSSリーダーを作ってみたいと思います!

最初にuserのpermissionをminifestで設定をしていきます。

この作業に関しては、ブラウザ作成の時と同じです。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="in.andante.rssRead"
 android:versionCode="1"
 android:versionName="1.0">
 <uses-sdk android:minSdkVersion="7" />
 <uses-permission android:name="android.permission.INTERNET"></uses-permission>

 <application android:icon="@drawable/icon" android:label="@string/app_name">
 <activity android:name=".rssRead"
 android:label="@string/app_name">
 <intent-filter>
 <action android:name="android.intent.action.MAIN" />
 <category android:name="android.intent.category.LAUNCHER" />
 </intent-filter>
 </activity>

 </application>
</manifest>

上記の設定のxmlですが、ITproさんとバージョンが異なるのか。。と思うのですが、(2011年4月1日現在はこれ)

次にレイアウトの為のxmlを用意しています。ここですが、レイアウトの中に入れるviewの為のレイアウトも入れる為、合わせて2個のxmlを用意しています。

main.xmlは次のように設定をしています。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 >
 <ListView 
 android:layout_width="fill_parent" 
 android:id="@+id/listView1" 
 android:layout_height="wrap_content"></ListView>
 <TextView  
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="@string/hello"/>
</LinearLayout>

普通に文字が入ってない時にも横幅がつぶれたら嫌なので、widthはfill_parent設定にしてみました!

itemlayout.xmlは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical">
 <TextView 
 android:text="TextView" 
 android:id="@+id/textView1" 
 android:textColor="#ffffff"
 android:lines="1"
 android:textSize="18sp"
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content"></TextView>
 <TextView 
 android:text="TextView" 
 android:id="@+id/textView2" 
 android:lines="2"
 android:ellipsize="end"
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content"></TextView>
</LinearLayout>

ellipsizeに関しては、文章が省略された場合に省略記号(…)をどこに表示するかを指定している。

この場合にはend(末尾)に表示を行っている。

次にクラスを作るみたいだが、最初にItemクラス。

package in.andante.rssReads;

public class Item {
 private CharSequence mTitle;
 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;
 }

}

タイトルと、文章を保持する為のクラスのようです。ひとつの記事ごとぶこのクラスを作成するのかと思います。

次にadapterを作成してみます。

package in.andante.rssReads;

import java.util.List;

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 RssListAdapter extends ArrayAdapter<Item> {

 private LayoutInflater mInflater;
 private TextView mTitle;
 private TextView mDescr;

 public RssListAdapter(Context context, List<Item> objects) {
 super(context,0, objects);
 // TODO Auto-generated constructor stub
 mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 }

 //一行ごとのビューを作成する。
 public View getView(int position, View convertView,ViewGroup parent){
 View view = convertView;
 if(convertView == null){
 view = mInflater.inflate(R.layout.itemlayout, null);
 }
 Item item = this.getItem(position);
 if(item != null){
 String title = item.getTitle().toString();
 mTitle = (TextView)view.findViewById(R.id.textView1);
 mTitle.setText(title);
 String descr = item.getDescription().toString();
 mDescr = (TextView)view.findViewById(R.id.textView2);
 mDescr.setText(descr);
 }
 return view;
 }

}

以前adapterを作成した時とは少し書き方が異なりますが、getViewがコンストラクタで要素を作成していくのかと思います。

ここでいままで見た事のないクラス[LayoutInflater]があります。

このクラスはレイアウトのxmlからviewを作成してくれるファイルです。

つまり、スクリプト上で、viewにいろいろ足す事なくまとまりができるので、これでitemlayout.xmlの内容を取得します。

package in.andante.rssReads;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;

public class rssReads extends Activity {
 private ArrayList mItems;
 private RssListAdapter mAdapter;
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 // Itemオブジェクトを保持するためのリストを生成し、アダプタに追加する
 mItems = new ArrayList();
 mAdapter = new RssListAdapter(this, mItems);

 ListView _listview = (ListView)findViewById(R.id.listView1);

 _listview.setAdapter(mAdapter);

 // サンプル用に空のItemオブジェクトをセットする
 for (int i = 0; i < 10; i++) {
 mAdapter.add(new Item());
 }
 }
}

最後が大分、参照サイトと異なるのだが、listActivityと言うのをActivityの代わりにいれたらエラーが出てしまったので、

取り急ぎ、Activityにしてみました。それ以外も試行錯誤をしております。

rssReader

この形も一部違うのですが、

取り急ぎ、行っている内容は問題ないかと思います。

つづく。

前後の記事

前の記事:

次の記事:

関連の記事

コメントの投稿

  • サイト内検索

新作アプリの紹介

関連サイトの紹介

アンドロイドアプリ開発TIPS
きぐるみカメラ
ふらいぱん
アンドロイドのデザイン集
Page top↑