2016-01-13 513230 views
1

我想制作一个音板。为此,我使用xml文件(名称和声音)制作了listview用原始文件在列表视图中添加imageview

首先,我用声音的标题做了一个listview。当我们点击它时,播放声音。

MainActivity:

mSoundPlayer = new SoundPlayer(this); 
     Sound[] soundArray = SoundStore.getSounds(this); 

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

     final ArrayAdapter<Sound> adapter = 
       new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, soundArray); 

     listView.setAdapter(adapter); 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView parent, View view, int position, long id) { 
       Sound sound = (Sound) parent.getItemAtPosition(position); 
       mSoundPlayer.playSound(sound); 
      } 
     }); 

我使用xml文件索引声音和声音的名称。

文件:arrays.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string-array name="labels"> 
     <item>First sound</item> 
     <item>Second soung</item> 
    </string-array> 

    <integer-array name="ids"> 
     <item>@raw/a1</item> 
     <item>@raw/a2</item> 
    </integer-array> 
</resources> 

而最后,我的布局:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="0dp" 
    android:paddingRight="0dp" 
    android:paddingTop="0dp" 
    android:paddingBottom="0dp" 
    tools:context="com.clemb.sardboard.MainActivity"> 

    <ListView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/listView" 
     android:numColumns="auto_fit" 
     android:gravity="center" 
     android:columnWidth="100dp" 
     android:verticalSpacing="5dp" 
     android:stretchMode="columnWidth" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"/> 
</RelativeLayout> 

我只是想知道如何将声音文件的名称前添加图片。我可以在我的array.xml中做到这一点?

谢谢。

回答

0

您可以将影像添加到您的array.xml,看看这里Storing R.drawable IDs in XML array

你需要创建自己的ArrayAdapterListView

SoundItemAdapter adapter = 
     new SoundItemAdapter(this, android.R.layout.sound_item, soundArray); 

listView.setAdapter(adapter); 

使用的名称前设置图像。 .. ArrayAdapter

public class SoundItemAdapter extends ArrayAdapter<Sound> { 
    private ArrayList<Sound> sounds; 
    private int soundItemLayoutId; 
    private Context context; 

    public SoundItemAdapter(Context context, int soundItemLayoutId, ArrayList<Sound> sounds) { 
     super(context, soundItemLayoutId, sounds); 
     this.context=context; 
     this.soundItemLayoutId = soundItemLayoutId; 
     this.sounds = sounds; 

    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     ViewHolderItem viewHolder; 
     if(convertView==null){ 
      convertView = LayoutInflater.from(context).inflate(soundItemLayoutId, parent, false); 
      //set up a ViewHolder to avoid calling findViewById() on every call to getView == smoother scroll 
      viewHolder = new ViewHolderItem(); 
      viewHolder.name = (TextView) convertView.findViewById(R.id.name); 
      viewHolder.image = (ImageView) convertView.findViewById(R.id.image); 
      // store the holder with the view. 
      convertView.setTag(viewHolder); 
     } else { 
      // return the viewHolder 
      viewHolder = (ViewHolderItem) convertView.getTag(); 
     } 

     Sound sound = sounds.get(position); 
     if (sound != null) { 
      viewHolder.name.setText(sound.name); 
      viewHolder.image.setImageDrawable(ContextCompat.getDrawable(context,sound.image)); 
     } 
     return convertView; 
     } 


    class ViewHolderItem { 
     TextView name; 
     ImageView image; 
    } 
} 

sound_item.xml

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


    <ImageView 
     android:layout_width="56dp" 
     android:layout_height="match_parent" 
     tools:src="@android:drawable/ic_media_play" 
     android:id="@+id/image" /> 

    <TextView 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:gravity="start|center" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     tools:text="Sound Name" 
     android:id="@+id/name" 
     android:layout_weight="1" /> 
</LinearLayout> 
0

我认为这个问题可以在这个帖子来回答:How to add an icon to a listview in a fragment

在你的情况下,你只需要进行适当的修改中的活动来使用,而不是一个片段。从概念上讲,它应该是一样的。您正在为每个列表项目自定义布局以包含图像视图。