getview()中带有多个按钮的列表视图

时间:2013-01-28 06:56:30

标签: android android-listview adapter

我的应用程序生成一个列表视图(即音频列表),列表中有2个按钮和3个文本视图。通过使用实现基本适配器的适配器可以点击两个按钮。使用其中一个按钮对于意图视图和另一个播放音频。当点击播放按钮时,我改变了按钮的背景(播放)。但问题是多个播放按钮背景被改变,如位置0,10,20,31,41 .. 。当我点击0行时,我也想知道如何更改所选列表视图的背景以区分播放音频与其他人...

请告诉我解决方案..提前谢谢 以下我的适配器类

public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        if (convertView == null) {
            convertView = l_Inflater.inflate(R.layout.lv_layout1, null);
            holder = new ViewHolder();
            holder.Title = (TextView) convertView.findViewById(R.id.Title);
            holder.Date = (TextView) convertView.findViewById(R.id.Date);
            holder.Time = (TextView) convertView.findViewById(R.id.Time);
            holder.Duration = (TextView) convertView.findViewById(R.id.Duration1);
            holder.view = (Button) convertView.findViewById(R.id.View);
            holder.play = (Button) convertView.findViewById(R.id.Play);
            holder.r_layout = (RelativeLayout) convertView.findViewById(R.id.r_layout);


            holder.Duration.setVisibility(View.INVISIBLE);

            holder.play.setBackgroundResource(0x7f020009);


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


        holder.play.setOnClickListener(new View.OnClickListener() 
        {

            public void onClick(View convertView) throws IllegalStateException 
            {
                // TODO Auto-generated method stub

                //here is code for play/stop the audio
holder.play.setBackgroundResource(0x7f020009);





            }
        });
        holder.view.setOnClickListener(new View.OnClickListener() {

            public void onClick(View convertView) {
                // TODO Auto-generated method stub
                Log.i("View","hai");
                Intent i=new Intent(context,audio_player.class);
                Bundle bd=new Bundle();

                String sel=itemDetailsrrayList.get(position).getTitle();
                String dur=itemDetailsrrayList.get(position).getDuration();


                bd.putString("audioID",sel);
                bd.putString("totalDuration",dur);

                i.putExtras(bd);

                System.out.println("After intent called");



                context.startActivity(i);
                ((Activity) context).finish();



            }
        });
        return convertView;
    }

    static class ViewHolder {
        TextView Title,Date,Time,Duration;
        ListView lv;
        Button view,play;
        RelativeLayout r_layout;
    }
}

4 个答案:

答案 0 :(得分:0)

你可以试试这个:

if (convertView == null) {
        convertView = l_Inflater.inflate(R.layout.lv_layout1, null);
        holder = new ViewHolder();
        holder.Title = (TextView) convertView.findViewById(R.id.Title);
        holder.Date = (TextView) convertView.findViewById(R.id.Date);
        holder.Time = (TextView) convertView.findViewById(R.id.Time);
        holder.Duration = (TextView) convertView.findViewById(R.id.Duration1);
        holder.view = (Button) convertView.findViewById(R.id.View);
        holder.play = (Button) convertView.findViewById(R.id.Play);
        holder.r_layout = (RelativeLayout) convertView.findViewById(R.id.r_layout);


        holder.Duration.setVisibility(View.INVISIBLE);




        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
 holder.play.setBackgroundResource(0x7f020009);

答案 1 :(得分:0)

试试这个,

我遇到了同样的问题。我在getView内使用按钮。Button点击选项不起作用。而不是Button请使用textView。然后写OnClickListener()

 holder.text.setOnClickListener(new View.OnClickListener() {

    public void onClick(View convertView) {
   }
  };

它会起作用。

答案 2 :(得分:0)

在许多情况下,您想知道所点击项目的行位置,并且您想知道该行中的哪个视图被点击。这在平板电脑用户界面中将变得更加重要。

您可以使用以下自定义适配器执行此操作:

private static class CustomCursorAdapter extends CursorAdapter {

    protected ListView mListView;

    protected static class RowViewHolder {
        public TextView mTitle;
        public TextView mText;
    }

    public CustomCursorAdapter(Activity activity) {
        super();
        mListView = activity.getListView();
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        // do what you need to do
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        View view = View.inflate(context, R.layout.row_layout, null);

        RowViewHolder holder = new RowViewHolder();
        holder.mTitle = (TextView) view.findViewById(R.id.Title);
        holder.mText = (TextView) view.findViewById(R.id.Text);

        holder.mTitle.setOnClickListener(mOnTitleClickListener);
        holder.mText.setOnClickListener(mOnTextClickListener);

        view.setTag(holder);

        return view;
    }

    private OnClickListener mOnTitleClickListener = new OnClickListener() {
        @Override
        public void onClick(View v) {
            final int position = mListView.getPositionForView((View) v.getParent());
            Log.v(TAG, "Title clicked, row %d", position);
        }
    };

    private OnClickListener mOnTextClickListener = new OnClickListener() {
        @Override
        public void onClick(View v) {
            final int position = mListView.getPositionForView((View) v.getParent());
            Log.v(TAG, "Text clicked, row %d", position);
        }
    };
}

答案 3 :(得分:0)

好吧,我刚才有同样的问题,这是解决方案: 首先,将代码放在BindView的{​​{1}}部分,设置并重置每个按钮的背景,因为只有设置而不重置会在滚动时将背景更改应用于列表中的所有按钮,小心上下文的变化。例如,要更改单击上的文本,请在单击之前获取textview,而不是在其中。检查下面的代码并注释澄清。 PS:不要复制/粘贴代码,这不是100%正确,因为我使用了我的完整代码并删除了无用的部分。

customAdapter