schnelle Frage, da meine andere Frage nie beantwortet wurde. Ich habe eine RecyclerView
, die mit einem SeekBar
für jeden Artikel (CardView
) bestückt wird. Ich würde gerne wissen, der beste Weg, um diese SeekBar
Position zu bekommen.Position der Suchleiste aus der Recycler-Ansicht?
Mit anderen Worten, wie würde ich in der Lage sein, die erste Suchleiste von der zweiten Suchleiste zu unterscheiden, wenn es zwei Elemente in der Recycleransicht gibt, die jeweils ihre eigene SeekBar
enthalten?
Auch, wenn dies hilft, ist der Hörer für sagte SeekBar
in meinem Adapter.
Beispiel des Codes auf Anfrage:
class ViewHolder extends RecyclerView.ViewHolder {
private TextView mName, mUsername, mPercent;
private SeekBar mSeekBar;
ViewHolder(View itemView) {
super(itemView);
mName = (TextView) itemView.findViewById(R.id.name_view_members);
mUsername = (TextView) itemView.findViewById(R.id.username_view_members);
mPercent = (TextView) itemView.findViewById(R.id.percent_text);
mSeekBar = (SeekBar) itemView.findViewById(R.id.percent_seekbar);
}
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
GroupMembers individual = mMembers.get(position);
holder.mName.setText(individual.getName());
holder.mUsername.setText(individual.getUsername());
//SeekBar Listener
holder.mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
//Find out which SeekBar triggered the event
int which = whichIsIt(seekBar.getId(), progress);
//Stored progress (where is it at)
int storedProgress = mAllProgress.get(which);
/**Two cases can occur: User goes left or right with the thumb.
* If RIGHT, we must check how much he's allowed to go in that
* direction (based on other seekbars), and stop him before it's
* too late. If LEFT, free up the space to allow the other seekbars.
**/
if (progress > storedProgress) {
//How much remains based on all seekbars.
int remaining = remaining();
//If progress 100%, don't let user move. (overextend)
if (remaining == 0) {
seekBar.setProgress(storedProgress);
} else {
//Progress available, check the availability of others,
//and let the user move as long as it's below 100% total.
if (storedProgress + remaining >= progress) {
mAllProgress.set(which, progress);
} else {
mAllProgress.set(which, storedProgress + remaining);
}
}
} else if (progress <= storedProgress) {
mAllProgress.set(which, progress);
}
}
private int whichIsIt(int id, int progress) {
holder.mPercent.setText(" " + progress + "%");
return R.id.percent_seekbar;
}
private int remaining() {
int remaining = TOTAL_AMOUNT;
for (int i = 0; i < mAllProgress.size(); i++) {
remaining -= mAllProgress.get(i);
}
if (remaining >= 100) {
remaining = 100;
} else if (remaining <= 0) {
remaining = 0;
}
return remaining;
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
Verfahren whichIsIt
sollte bestimmen, welche SeekBar
des RecyclerView
ausgelöst wird.
posten Sie Ihre Beispielcode – raj
@raj ich bearbeitet/hinzugefügt den obigen Beispielcode. Jede Hilfe würde sehr geschätzt werden ... Ich stecke seit einer ganzen Weile fest. –
@AndrewMagana Ich habe mehrere Suchleisten und wenn ich Scroll vorhergehende es Audio ändert, wie man es verhindert.? –