0

Sectioned List拡張するアクティビティで使用していますが、このアクティビティListActivity に追加Actionbarする必要があるため、ここでは ListActivity を使用できません。だから私はListView同じために使用しようとしています。しかし、アダプターをに設定する方法がわかりませんListview。SectionedListView に使用するカスタム アダプターを設定する必要があるためです。しかし、単純な ListView に使用すると、NullPointer例外が発生します。私はそれのために十分な時間を無駄にしていました。助けてください。

これは ListView の xml ファイルです

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

    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>

and this is the adapter used for (ListActivity).


public class EntryAdapter extends ArrayAdapter<Item> {

    private Context context;
    private ArrayList<Item> items;
    private LayoutInflater vi;
    private ImageDownloader mImageDownloader;
    public EntryAdapter(Context context,ArrayList<Item> items, ImageDownloader mImageDownloader) {
        super(context,0, items);
        this.context = context;
        this.items = items;
        vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.mImageDownloader = mImageDownloader;
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        Log.v("position in entry adapter", ""+position);

        final Item i = items.get(position);
        if (i != null) {
            if(i.isSection()){
                SectionItem si = (SectionItem)i;
                v = vi.inflate(R.layout.list_item_section, null);

                v.setOnClickListener(null);
                v.setOnLongClickListener(null);
                v.setLongClickable(false);

                final TextView sectionView = (TextView) v.findViewById(R.id.list_item_section_text);
                sectionView.setText(si.getTitle());
            }else{
                EntryItem ei = (EntryItem)i;
                v = vi.inflate(R.layout.list_item_entry, null);
                final TextView title = (TextView)v.findViewById(R.id.list_item_entry_title);
                final TextView subtitle = (TextView)v.findViewById(R.id.list_item_entry_summary);
                final ImageView cat_icon = (ImageView)v.findViewById(R.id.category_icon);
                final ImageView channel_icon = (ImageView)v.findViewById(R.id.channel_icon);
                if (title != null) 
                    title.setText(ei.title);
                if(subtitle != null)
                    subtitle.setText(ei.subtitle);
                if(cat_icon != null)
                {
                    if(ei.catIcon != null)
                        cat_icon.setImageBitmap(ei.catIcon);
                    else
                        cat_icon.setVisibility(View.INVISIBLE);
                }
                if(channel_icon !=null)
                {
                    if(ei.url != null)
                    {
                        mImageDownloader.download(ei.url,channel_icon);
                        Log.v("url in adapter", ei.url);
                    }
                    else
                        channel_icon.setVisibility(View.INVISIBLE);
                }
            }
        }
        return v;
    }


}



mList = (ListView) findViewById(R.id.list);

EntryAdapter adapter = new EntryAdapter(this, items, mImageDownloader);
        mList.setAdapter(adapter);
        mList.setOnItemClickListener(this);

ありがとうマハイヤー。

4

2 に答える 2

4

ListActivityに拡張するクラスActivityを変更するために必要なこと

1.) ListActivity の代わりに Activity を使用してクラスを拡張します

2.) xml の ListView の ID を から に変更します@android:id/list@+id/your_listview

3.) を使用して xml で宣言された ListView のインスタンスを見つける

ListView your_listview = (ListView)findViewById(R.id.your_listview);  

4.) your_listview.setAdapter(adapter); を使用してアダプターを設定します。

于 2012-06-07T07:34:38.907 に答える
0

これを試して、

1) ListView の id を に変更しますandroid:id="@+id/list"

2) ListActivity を拡張する代わりに、Activity を拡張します。

于 2012-06-07T07:34:52.157 に答える