如何在android中的列表中显示ArrayAdapter的文本和图标?

时间:2011-12-17 11:31:14

标签: android android-widget android-listview android-arrayadapter

我正在创建在线媒体播放器。哪个用户可以创建自己的播放列表。 因此,对于每个用户,都有不同的列表。在该列表中有一个名为Quickmix的项目,它是修复的,位于该列表的顶部。 我想在Quickmix文本附近显示图标,并且还希望在当前播放的播放列表名称附近显示一个图标。 为了显示该列表,我在xml文件中创建了一个ListView。 我创建了PlayListActivity.java,它扩展了Activity。 在那个班级我创建了一个ArrayAdapter

private ArrayAdapter< String > mPlayListAdapter = null;
private ListView mPlayList = null;
private String[] mPlayListNames = null;

在onCreate方法中我的代码就像

setContentView( R.layout.playlist_layout );

            mPlayList = new String[array.length ];
        for( int i = 0; i < length; i++ )
        {
            mPlayListNames[i] = array[i].mPlayList;
        }
    mPlayList = ( ListView )findViewById( R.id.playList );
    try {
        mPlayListAdapter =
            new ArrayAdapter< String >( this, 
                android.R.layout.simple_list_item_1,
                mPlayListNames );
        mPlayList.setAdapter( mPlayListAdapter );
        mPlayList.setOnItemClickListener( mPlayListListener );
    } catch( Exception e ) {
        Intent nextActivityIntent = new Intent(
            getApplicationContext(),
            Welcome.class );
        finish();
        startActivity( nextActivityIntent );
        return;
    }
/** 
 * Called when user clicks on any playlist name. This listener starts 
 * playback of that playlist.
 */
private OnItemClickListener mPlayListListener =
    new OnItemClickListener()
    {
        public void onItemClick( AdapterView<?> parent, View view,
            int position, long id )
        {
            Intent nextActivityIntent = new Intent( view.getContext(),
                SomeActivity.class );
            //Some code to start SomeActivity
        }
    };

我无法将ListActivity / any扩展到PlayListActivity.java 我只能扩展活动。

有没有解决方法如何做到这一点?I want o/p like this

2 个答案:

答案 0 :(得分:0)

您必须创建ListAdapter。例如:

private class EfficientAdapter extends BaseAdapter {
    private LayoutInflater mInflater;
    private Bitmap mIcon1;
    private Bitmap mIcon2;

    public EfficientAdapter(Context context) {
        // Cache the LayoutInflate to avoid asking for a new one each time.
        mInflater = LayoutInflater.from(context);


    }

    /**
     * The number of items in the list is determined by the number of speeches
     * in our array.
     *
     * @see android.widget.ListAdapter#getCount()
     */
    public int getCount() {

        return stations.length;
    }

    /**
     * Since the data comes from an array, just returning the index is
     * sufficent to get at the data. If we were using a more complex data
     * structure, we would return whatever object represents one row in the
     * list.
     *
     * @see android.widget.ListAdapter#getItem(int)
     */
    public Object getItem(int position) {
        return position;
    }

    /**
     * Use the array index as a unique id.
     *
     * @see android.widget.ListAdapter#getItemId(int)
     */
    public long getItemId(int position) {
        return position;
    }

    /**
     * Make a view to hold each row.
     *
     * @see android.widget.ListAdapter#getView(int, android.view.View,
     *      android.view.ViewGroup)
     */

    public View getView(final int position, View convertView, ViewGroup parent) {
        // A ViewHolder keeps references to children views to avoid unneccessary calls
        // to findViewById() on each row.

        // When convertView is not null, we can reuse it directly, there is no need
        // to reinflate it. We only inflate a new View when the convertView supplied
        // by ListView is null.
        if (convertView == null) {

            convertView = mInflater.inflate(R.layout.listitem, null);

            // Creates a ViewHolder and store references to the two children views
            // we want to bind data to.

            TextView textView = (TextView) convertView.findViewById(R.id.text1);
            textView.setText(stations[position]);


        } else {
            // Get the ViewHolder back to get fast access to the TextView
            // and the ImageView.

        }


        return convertView;
    }



}

您可以使用此适配器:

mPlayList.setListAdapter(new EfficientAdapter(ctx));

你如何理解,在R.layout.listitem你可以创建你的按钮。在方法getView中 - 您必须处理此按钮。

UPD:使用Bitmap的例子: 您可以在getView中添加它:

ImageView im  = new ImageView(this);
im.setImageBitmap(bitmap);
convertView.addView(im);

答案 1 :(得分:0)