【问题标题】:how can set two adapter into a list?如何将两个适配器设置为一个列表?
【发布时间】:2011-11-17 18:27:30
【问题描述】:

我在安卓系统中工作。我正在创建一个音乐应用程序。在这个应用程序中,我想在列表中显示歌曲的标题和艺术家的名字。 这是我的代码:-

 String[] title_of_song={"title1","title2","title3","title4","title5"};
 String[] artist_of_song={"artist1","artist2","artist3","artist4","artist5"};
 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.row_button, R.id.TextView_songName, title_of_song);


 ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, R.layout.row_button, R.id.TextView_byArtist, artist_of_song);

 list.setAdapter(adapter);
 list.setAdapter(adapter1); //**this is creating error**

这是造成列表无法 setAdapter 两次的问题。所以请告诉我解决方案,以便我可以为歌曲的标题和艺术家姓名设置 setAdapter。 这是造成列表无法两次设置适配器的问题。所以请告诉我解决方案,以便我可以为歌曲的标题和艺术家姓名设置 setAdapter

提前谢谢你。

【问题讨论】:

  • title1 表演者是艺术家 1 等等?换句话说,标题和艺术家之间有联系吗?
  • 是的,先生,两者都是相关的。意味着我们为每首歌有两个数组,一个数组包含歌曲的标题,第二个数组包含该歌曲的艺术家姓名。换句话说,如果我使用 title_of_song[1] 和 Artist_of_song[1],那么这些是歌曲 1 的信息。意味着两者相互关联。
  • 好的,所以当你想显示它时。或者?
  • 所以 Umesh 给了你一个很好的答案......你需要使用从 ArrayAdapter 派生的 Adapter class Song { public String title; public String artist; } 或使用 SimpleAdapter 并将数据存储在 List> where单首歌曲是 HashMap 的实例,例如 {"title": "title1", "artist" : "artist1"} 请参阅此答案以获取更多详细信息stackoverflow.com/questions/6305899/custom-listview-android/…
  • 你想要什么?您想在活动中的某些条件下交替显示两个列表,还是想在一个列表中显示到不同的字符串数组?

标签: android


【解决方案1】:

我不知道你想达到什么目的。您的两个适配器都有相同的代码。为什么不创建一个具有两个适配器值的单个适配器。

刚刚看到您编辑的问题

创建一个自定义适配器并扩展一个具有两个文本视图的布局 - 一个用于艺术家,一个用于歌曲。

class TaskAdapter extends ArrayAdapter{

    ArrayList artist, song;
    public TaskAdapter(ArrayList songs, ArrayList artist){
           this.artist = artist;
           this.song = songs;
    }       


    public TaskAdapter(Context context, int textViewResourceId ) {
        super(context, textViewResourceId);

    }

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

        View v = convertView;
        ViewHolder holder;
        if(v == null) {
            LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = li.inflate(R.layout.custom_list, null);
            holder = new ViewHolder();
            holder.taskId = (TextView)v.findViewById(R.id....);
            holder.taskDesc = (TextView)v.findViewById(R.id....);

            v.setTag(holder); 
        }
        else{
            holder = (ViewHolder)v.getTag();
        }

        holder.tArtist.setText(artist.get(position));

        holder.tSong.setText(song.get(position));           


        return v;
    }       

}   
static class ViewHolder {
    TextView tArtist;
    TextView tSong;     

}

【讨论】:

  • 不,先生,两个适配器都不一样。一个用于获取歌曲名称列表,一个用于获取艺术家姓名。这两个值都在运行时。请帮帮我先生。
  • Paresh sir 和 Umesh sir 的回答,都非常正确……我用了 paresh sir 的逻辑,解决了我的问题……
【解决方案2】:

我建议将标题 - 艺术家添加到一个字符串中并使用单个适配器或使用两个单独的列表。

【讨论】:

    【解决方案3】:

    我建议将标题 - 艺术家添加到一个字符串或任何 xml 中,并使用单个适配器为您的代码提供更大的灵活性并增加代码的可重用性。

    【讨论】:

      猜你喜欢
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多