【问题标题】:listview(custom adapter) with media player android带有媒体播放器android的listview(自定义适配器)
【发布时间】:2016-08-03 05:52:16
【问题描述】:

大家好,我在 listview(自定义适配器)中遇到问题。我已经使用播放音频(mp3 文件)的媒体播放器实现了 listview。我在我的原始文件夹中包含了 mp3 文件。我知道这是一个循环视图。我的问题是在 6-7 行之后播放相同的 mp3 文件与第 0 位的文件相同。 有什么解决办法吗? 我的主要活动 公共类 MainActivity 扩展 Activity 实现 OnItemClickListener {

    ListView lview3;
    ListViewCustomAdapter adapter;
    private ArrayList<Object> itemList;
    private ItemBean bean;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        prepareArrayLits();
        lview3 = (ListView) findViewById(R.id.listView1);
        adapter = new ListViewCustomAdapter(this, itemList);
        lview3.setAdapter(adapter);

        lview3.setOnItemClickListener(this);
    }

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int position1, long id) {
        // TODO Auto-generated method stub
        ItemBean bean = (ItemBean) adapter.getItem(position1);

        Toast.makeText(this, "Title => "+bean.getTitle()+" \n Description => "+bean.getDescription(), Toast.LENGTH_SHORT).show();
    }

    /* Method used to prepare the ArrayList,
     * Same way, you can also do looping and adding object into the ArrayList.
     */
    public void prepareArrayLits()
    {
        itemList = new ArrayList<Object>();

        AddObjectToList(R.drawable.ic_add, "Add", "Add desc",R.raw.mp1);
        AddObjectToList(R.drawable.ic_delete, "Delete", "Delete desc",R.raw.mp2);
        AddObjectToList(R.drawable.ic_down, "Down", "Down desc",R.raw.mp3);
        AddObjectToList(R.drawable.ic_info, "Information", "Information desc",R.raw.mp4);
        AddObjectToList(R.drawable.ic_help, "Help", "Help desc",R.raw.mp5);
        AddObjectToList(R.drawable.ic_download, "Download", "Download desc",R.raw.mp6);
        AddObjectToList(R.drawable.ic_mail, "Mail", "Mail desc",R.raw.mp7);
        AddObjectToList(R.drawable.ic_search, "Search", "Search desc",R.raw.mp8);
        AddObjectToList(R.drawable.ic_settings, "Settings", "Settings desc",R.raw.mp9);
    }

    // Add one item into the Array List
    public void AddObjectToList(int image, String title, String desc,int audio)
    {
        bean = new ItemBean();
        bean.setDescription(desc);
        bean.setImage(image);
        bean.setTitle(title);
        bean.setAudio(audio);
        itemList.add(bean);
    }
}

我的列表视图自定义适配器

public class ListViewCustomAdapter extends ArrayAdapter {
    MediaPlayer mPlayer;
    Context c;
    ArrayList<Object> itemList;

    public Activity context;
    public LayoutInflater inflater;

    public ListViewCustomAdapter(Activity context, ArrayList<Object> itemList) {
        super(context, R.layout.main);

        this.context = context;
        this.itemList = itemList;
        this.c = context;
        this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

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

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

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

    public static class ViewHolder {
        ImageView imgViewLogo;
        TextView txtViewTitle;
        TextView txtViewDescription;
        Button btn1, btn2;
    }

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

        ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = inflater.inflate(R.layout.items, null);

            holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.imgViewLogo);
            holder.btn1 = (Button) convertView.findViewById(R.id.button);
            holder.btn1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (position == 0) {
                        mPlayer = MediaPlayer.create(getContext(), R.raw.mp1);
                        mPlayer.start();
                    }
                    if (position == 1) {
                        mPlayer = MediaPlayer.create(getContext(), R.raw.mp2);
                        mPlayer.start();
                    }
                    if (position == 2) {
                        mPlayer = MediaPlayer.create(getContext(), R.raw.mp3);
                        mPlayer.start();
                    }
                    if (position == 3) {
                        mPlayer = MediaPlayer.create(getContext(), R.raw.mp4);
                        mPlayer.start();
                    }
                    if (position == 4) {
                        mPlayer = MediaPlayer.create(getContext(), R.raw.mp5);
                        mPlayer.start();
                    }
                    if (position == 5) {
                        mPlayer = MediaPlayer.create(getContext(), R.raw.mp6);
                        mPlayer.start();
                    }
                    if (position == 6) {
                        mPlayer = MediaPlayer.create(getContext(), R.raw.mp7);
                        mPlayer.start();
                    }
                    if (position == 7) {
                        mPlayer = MediaPlayer.create(getContext(), R.raw.mp8);
                        mPlayer.start();
                    }
                    if (position == 8) {
                        mPlayer = MediaPlayer.create(getContext(), R.raw.mp9);
                        mPlayer.start();
                    }


                }
            });


            holder.btn2 = (Button) convertView.findViewById(R.id.button2);
            holder.txtViewTitle = (TextView) convertView.findViewById(R.id.txtViewTitle);
            holder.txtViewDescription = (TextView) convertView.findViewById(R.id.txtViewDescription);

            convertView.setTag(holder);
        } else
            holder = (ViewHolder) convertView.getTag();

        ItemBean bean = (ItemBean) itemList.get(position);

        holder.imgViewLogo.setImageResource(bean.getImage());
        holder.txtViewTitle.setText(bean.getTitle());
        holder.txtViewDescription.setText(bean.getDescription());

        return convertView;
    }

}

【问题讨论】:

    标签: java android listview


    【解决方案1】:

    只是因为 convertView 被重用了。 设置holder.btn1.setOnClickListener(new View.OnClickListener() { ...,即使(convertView != null)

    此外,对所有视图项使用单个 MediaPlayer 可能比一次又一次地创建它更好。

    【讨论】:

    • 谢谢你的摇滚 :)。
    猜你喜欢
    • 2014-09-03
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 2013-05-21
    • 2019-01-27
    • 1970-01-01
    相关资源
    最近更新 更多