Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

SlidingDrawerで、ListActivityで設定したデータを表示する方法

XMLレイアウトで、SlidingDrawerとListActivityで設定したデータを表示するようにしています。
アプリを起動すると、ListActivityクラスが最初に起動する仕組みになっていて、
このクラスで、setContentView()で、XMLレイアウトを設定しようと考えていたのですが、
エラーがでてしまいます。
スマートに解決する方法はありますでしょうか。


<ListActivity>
package jp.co.project.android;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.Window;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;

//アドレス帳へのアクセス
public class AndroidProjectActivity extends ListActivity{

    //テキストビュー
    private TextView textView;
    //テキストID
    private final static int REQUEST_TEXT = 0;

    //アプリ生成時に呼ばれる
    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.listitem);

        //配列リストの生成
        @SuppressWarnings("rawtypes")
        List items=new ArrayList();

        //アドレス情報の取得
        ContentResolver cr=getContentResolver();
        Cursor c=cr.query(ContactsContract.Contacts.CONTENT_URI,
            null,null,null,null);

        while (c.moveToNext()) {
            //グループ
            int group=c.getInt(c.getColumnIndex(
                ContactsContract.Contacts.IN_VISIBLE_GROUP));
            if (group!=1) continue;

            //ID
            String id=c.getString(
                c.getColumnIndex(ContactsContract.Contacts._ID));

            //表示名
            String displayName=c.getString(c.getColumnIndex(
                ContactsContract.Contacts.DISPLAY_NAME));

            //写真
            int photoID=c.getInt(c.getColumnIndex(
                ContactsContract.Contacts.PHOTO_ID));
            Bitmap icon=null;
            if (photoID!=0) {
                Uri uri=ContentUris.withAppendedId(
                    ContactsContract.Contacts.CONTENT_URI,Long.parseLong(id));
                InputStream in=ContactsContract.Contacts.openContactPhotoInputStream(cr,uri);
                icon=BitmapFactory.decodeStream(in);
            }

            //電話
            String dial1="";
            if (Integer.parseInt(c.getString(
                c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)))>0) {
                Cursor cp=cr.query(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
                    new String[]{id}, null);
                while (cp.moveToNext()) {
                    dial1=cp.getString(cp.getColumnIndex(
                        ContactsContract.CommonDataKinds.Phone.DATA1));
                }
                cp.close();
            }

            //メール
            String mail="";
            Cursor cm=cr.query(
                ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                null,
                ContactsContract.CommonDataKinds.Email.CONTACT_ID+" = ?",
                new String[]{id},null);
            while (cm.moveToNext()) {
                mail=cm.getString(cm.getColumnIndex(
                    ContactsContract.CommonDataKinds.Email.DATA));
            }
            cm.close();

            //追加
            items.add(new ListArrayItem(icon,displayName,dial1,mail));
        }

        // アダプタの指定
        ListAdapter adapter=new ListArrayAdapter(
            this,R.layout.listitem,items);
        setListAdapter(adapter);

        //リストビューの設定
        ListView listView=this.getListView();
        listView.setBackgroundColor(Color.WHITE);
        listView.setScrollingCacheEnabled(false);
    }
}

<ArrayAdapter>
package jp.co.project.android;

import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

//アドレス帳へのアクセス
public class ListArrayAdapter extends ArrayAdapter<ListArrayItem>
    implements OnClickListener{
    private int                 layoutID;
    private List<ListArrayItem> items;
    private LayoutInflater      inflater;

    //テキストビュー
    private TextView textView;
    private TextView txt;
    //テキストID
    private final static int REQUEST_TEXT = 0;

    //コンストラクタ.
    public ListArrayAdapter(Context context,
            int layoutID,List<ListArrayItem> items) {
        super(context,layoutID,items);
        this.layoutID=layoutID;
        this.items   =items;
        this.inflater=(LayoutInflater)context.getSystemService(
                Context.LAYOUT_INFLATER_SERVICE);
    }

    //1要素分のビューの取得
    @Override
    public View getView(int position, View convertView,ViewGroup parent) {
        //ビューの生成
        View view;
        if(convertView!=null){
            view=convertView;
        } else{
            view=inflater.inflate(layoutID,null);
        }

        //アイテムの取得
        ListArrayItem item=items.get(position);

        //アイコン
        ImageView imageView=(ImageView)view.findViewWithTag("icon");
        imageView.setImageDrawable(new BitmapDrawable(item.icon));

        textView = null;
        textView=(TextView)view.findViewWithTag("text");
        textView.setText(item.text);
        textView=(TextView)view.findViewWithTag("dial");
        textView.setText(item.dial);
        Object obj = view.findViewById(R.id.TextView);
        txt =(TextView)obj;
        txt.setOnClickListener(this);

        return view;
    }

    public void onClick(View view) {
        Intent intent = new Intent("android.intent.action.CALL", Uri.parse("tel:" + txt.getText()));
        view.getContext().startActivity(intent);
    }

}

<listitem.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="horizontal"
    android:background="#00FFFFFF">
    <TextView
        android:id="@+id/label1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000000"
        android:textSize="24px"
        android:text="Hello World"/>
    <SlidingDrawer
        android:id="@+id/slidingdrawer"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:handle="@+id/handle"
        android:content="@+id/content">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#00FFFFFF">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:minHeight="48px"
                android:maxWidth="48px"
                android:maxHeight="48px"
                android:minWidth="48px"
                android:tag="icon"/>
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:background="#00FFFFFF">
                <TextView
                    android:layout_width  ="wrap_content"
                    android:layout_height ="wrap_content"
                       android:textSize      ="24dp"
                    android:textColor     ="#000000"
                    android:layout_gravity="center_vertical"
                    android:tag           ="text"/>
                <TextView
                    android:id="@+id/TextView"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="16px"
                    android:textColor="#000000"
                    android:layout_gravity="center_vertical"
                    android:tag="dial"/>
            </LinearLayout>
        </LinearLayout>
    </SlidingDrawer>
</LinearLayout>

1

回答

82434

閲覧

1件の回答

評価

0

>エラーがでてしまいます。
これだけで質問になると思ってはいけない。
まずはガイドラインから。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。