IP696
IP696

Reputation: 181

Pressing the button element listview

I have a sheet with buttons. I assign an event handler to an element of the sheet. and when you get him the position. But I need to assign an event to a button that is in this element of the sheet. I do it in the adapter and it is pressed. but how do I determine which element of the sheet was pressed?

class RecordAdapter extends BaseAdapter implements View.OnClickListener {
    MediaPlayer mediaPlayer;
    private LayoutInflater inflater;
    ArrayList<RecordBean> recordBeans;
    Context ctx;

    public RecordAdapter(final Context ctx, ArrayList<RecordBean> recordBeans) {
        this.recordBeans =recordBeans;
        this.ctx=ctx;
        inflater = LayoutInflater.from(ctx);
    }

    @Override
    public int getCount() {
        return recordBeans.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View view = convertView;
        final ViewHolder holder;
        if (convertView == null) {
            view = inflater.inflate(R.layout.recorditem, parent, false);
            holder = new ViewHolder();
            holder.date = (TextView) view.findViewById(R.id.recordate);
            holder.from = (TextView) view.findViewById(R.id.recordFrom);
            holder.to = (TextView) view.findViewById(R.id.recordTo);
            holder.seekBar = (SeekBar) view.findViewById(R.id.seekBar);
            holder.start = (Button) view.findViewById(R.id.btnStart);
            holder.stop = (Button) view.findViewById(R.id.btnStop);

            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }
        holder.date.setText(" " + recordBeans.get(position).getDate());
        holder.from.setText(" " + recordBeans.get(position).getFrom());
        holder.to.setText(" " + recordBeans.get(position).getTo());
        holder.start.setOnClickListener(this);
        holder.stop.setOnClickListener(this);
        return view;
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btnStart:
                mediaPlayer = MediaPlayer.create(ctx,Uri.parse(recordBeans.get(3).getFile()));
                mediaPlayer.start();
                break;
        }
    }

    private static class ViewHolder {
        TextView date;
        TextView from;
        TextView to;
        SeekBar seekBar;
        Button start;
        Button stop;
    }
    }
}

instead recordBeans.get(3).getFile() I want to write recordBeans.get(itemPosition).getFile()

Now I have the same setting to all buttons

Upvotes: 1

Views: 60

Answers (3)

Hareshkumar Chhelana
Hareshkumar Chhelana

Reputation: 24848

Try this way,hope this will help you to solve your problem.

Set you RecordBean data to start Button Tag and when you click appropriate start Button get value from Tag and use it as per your requirement.

class RecordAdapter extends BaseAdapter implements View.OnClickListener {
    MediaPlayer mediaPlayer;
    ArrayList<RecordBean> recordBeans;
    Context ctx;

    public RecordAdapter(final Context ctx, ArrayList<RecordBean> recordBeans) {
        this.recordBeans =recordBeans;
        this.ctx=ctx;
    }

    @Override
    public int getCount() {
        return recordBeans.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View view = convertView;
        final ViewHolder holder;
        if (convertView == null) {
            view = LayoutInflater.from(ctx).inflate(R.layout.recorditem, parent, false);
            holder = new ViewHolder();
            holder.date = (TextView) view.findViewById(R.id.recordate);
            holder.from = (TextView) view.findViewById(R.id.recordFrom);
            holder.to = (TextView) view.findViewById(R.id.recordTo);
            holder.seekBar = (SeekBar) view.findViewById(R.id.seekBar);
            holder.start = (Button) view.findViewById(R.id.btnStart);
            holder.stop = (Button) view.findViewById(R.id.btnStop);

            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }
        holder.date.setText(" " + recordBeans.get(position).getDate());
        holder.from.setText(" " + recordBeans.get(position).getFrom());
        holder.to.setText(" " + recordBeans.get(position).getTo());
        holder.start.setTag(recordBeans.get(position));
        holder.start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mediaPlayer = MediaPlayer.create(ctx,Uri.parse(((RecordBean) v.getTag()).getFile()));
                mediaPlayer.start();
            }
        });
        holder.stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mediaPlayer.stop();
            }
        });
        return view;
    }

    private static class ViewHolder {
        TextView date;
        TextView from;
        TextView to;
        SeekBar seekBar;
        Button start;
        Button stop;
    }
}

Upvotes: 2

Vijeesh
Vijeesh

Reputation: 191

Check this:

    final int itemPosition = position;

    holder.start.setOnClickListenerOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                   mediaPlayer = MediaPlayer.create(ctx,Uri.parse(recordBeans.get(itemPosition ).getFile()));
                   mediaPlayer.start();
    }
    });
            holder.stop.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    mediaPlayer.stop());
    }
    });

Upvotes: 0

Rustam
Rustam

Reputation: 6515

you can do this inside your getView(...) method itself

     holder.start.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                    mediaPlayer = MediaPlayer.create(ctx,Uri.parse(recordBeans.get(position).getFile()));
                    mediaPlayer.start();

            }
        });

same for stop.

     holder.stop.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                  mediaPlayer.stop();

            }
        });

Upvotes: 3

Related Questions