Reputation: 181
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
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
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
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