定制的Listview包含android中的单个按钮

定制的Listview包含android中的单个按钮,android,android-listview,Android,Android Listview,我正在开发一个android应用程序,它需要一个定制的listview 我需要一个自定义的listview,它看起来像: 每当我单击“扬声器”按钮时,它都会播放它所属项目的内容 我不知道listview将有多少项,所以我想知道如何命名所有扬声器按钮,以及如何获得任何按钮的相应内容 有什么想法吗 谢谢 您需要通过扩展BaseAdapter或ArrayAdapter类来创建一个自定义适配器类 创建自定义适配器类后,重写getView()方法 您可以查看以下链接: 或者你可以查看我的博客中的

我正在开发一个android应用程序,它需要一个定制的listview

我需要一个自定义的listview,它看起来像:

每当我单击“扬声器”按钮时,它都会播放它所属项目的内容

我不知道listview将有多少项,所以我想知道如何命名所有扬声器按钮,以及如何获得任何按钮的相应内容

有什么想法吗


谢谢

您需要通过扩展
BaseAdapter
ArrayAdapter
类来创建一个自定义适配器

创建自定义适配器类后,重写
getView()
方法

您可以查看以下链接:


或者你可以查看我的博客中的ListView类别。

按照@Paresh Mayani的说法,你必须创建自定义适配器

您可以从中找到演示或参考链接


如果您发现任何问题,可以根据您的要求执行,然后告诉我。

您也可以使用以下方法执行

首先定义你想要的音乐数组的列表视图和列表

List<HashMap<String, String>> MusicArray;
ListView MusicList;
然后现在创建自定义音乐列表,该列表将扩展BaseAdapter,如下所示

public class Custom_Music_List extends BaseAdapter {
    Context contex;
    ViewHolder holder;

    List<HashMap<String, String>> MusicItems;
    TextView SongName, SongDescription;

    public Custom_Music_List(Context context,
            List<HashMap<String, String>> MusicArray) {

        contex = context;
        MusicItems = MusicArray;

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return MusicItems.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(final int position, View convertView,
            ViewGroup parent) {
        // TODO Auto-generated method stub

        if (convertView == null) {

            holder = new ViewHolder();

            LayoutInflater inflater = (LayoutInflater) LayoutInflater
                    .from(contex);
            convertView = inflater.inflate(R.layout.custom_music_cell, parent,
                    false);

            holder.SongName = (TextView) convertView.findViewById(R.id.SongName);
            holder.SongName.setText(MusicItems.get(position).get("SongName"));

            holder.SongDescription = (TextView) convertView.findViewById(R.id.SongDescription);
            holder.SongDescription.setText( + MusicItems.get(position).get("SongDescription"));

        }

        return convertView;
    }

}
公共类自定义音乐列表扩展BaseAdapter{
语境语境;
视窗座;
列出音乐项目;
TextView歌曲名称、歌曲描述;
公共自定义音乐列表(上下文、,
列表(卡雷){
上下文=上下文;
MusicItems=MusicArray;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回MusicItems.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回位置;
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回位置;
}
@凌驾
公共视图getView(最终整型位置,视图转换视图,
视图组(父级){
//TODO自动生成的方法存根
if(convertView==null){
holder=新的ViewHolder();
LayoutInflater充气机=(LayoutInflater)LayoutInflater
.来自(contex);
convertView=充气机。充气(R.layout.custom\u music\u单元格,父单元格,
假);
holder.SongName=(TextView)convertView.findViewById(R.id.SongName);
holder.SongName.setText(MusicItems.get(position.get)(“SongName”);
holder.SongDescription=(TextView)convertView.findViewById(R.id.SongDescription);
holder.SongDescription.setText(+MusicItems.get(position.get)(“SongDescription”);
}
返回视图;
}
}
然后按照下面的方法将adapter设置为MusicList,您将能够获得单击的相应列表项

MusicList.setAdapter(new Custom_contact(ClassName.this, MusicArray));
MusicList.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View view,
                int position, long arg3) {

            // You will get position of row clicked from here using position, then try to access particular item from list using position

            Log.i("Song Clicked", MusicArray.get(position).get("SongName"))

            // Perform Action based upon position of song

        }
});
MusicList.setAdapter(新的自定义_联系人(ClassName.this,MusicArray));
MusicList.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView arg0,视图,
整数位置,长arg3){
//您将使用position从这里获得单击行的位置,然后尝试使用position从列表中访问特定项
Log.i(“歌曲点击”,MusicArray.get(位置)。get(“歌曲名称”))
//根据乐曲的位置执行动作
}
});

您可以通过为listview的自定义适配器中的每一行扩展单独的布局来实现。如果这样做,则每个按钮只有1个ID,那么如何识别每个按钮以分配其自己的侦听器@AppuYes,您将在R.java中为按钮生成唯一的id。但您可以重写getView()方法,在该方法中,您可以设置标记(位置)以唯一地标识listview中的每个按钮?我的目的是在itemclick上显示消息的信息,只有当你点击Speaker按钮时,它才会说出消息的内容。谢谢,但是在每个列表项上,都会有一个按钮(Speaker按钮),我想捕捉他们的事件(onclick),因此每当他们被点击时,相关的内容都会被说出@Songokute是的,您可以将
OnClickListener
分配给
getView()方法中的每个按钮。您定义了自定义适配器吗?
MusicList.setAdapter(new Custom_contact(ClassName.this, MusicArray));
MusicList.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View view,
                int position, long arg3) {

            // You will get position of row clicked from here using position, then try to access particular item from list using position

            Log.i("Song Clicked", MusicArray.get(position).get("SongName"))

            // Perform Action based upon position of song

        }
});