StationViewHolder: Fix view holder is holding to network across station re-binds.

This commit is contained in:
Andreas Schildbach 2018-11-13 12:01:17 +01:00
parent b9b4052fe5
commit 94d8c8c033
3 changed files with 9 additions and 16 deletions

View file

@ -432,7 +432,7 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware
stationListLayoutManager = new LinearLayoutManager(this); stationListLayoutManager = new LinearLayoutManager(this);
stationList.setLayoutManager(stationListLayoutManager); stationList.setLayoutManager(stationListLayoutManager);
stationList.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST)); stationList.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
stationListAdapter = new StationsAdapter(this, network, maxDeparturesPerStation, products, this, this); stationListAdapter = new StationsAdapter(this, maxDeparturesPerStation, products, this, this);
stationList.setAdapter(stationListAdapter); stationList.setAdapter(stationListAdapter);
stationList.addOnScrollListener(new RecyclerView.OnScrollListener() { stationList.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override @Override

View file

@ -42,7 +42,6 @@ import de.schildbach.oeffi.stations.QueryDeparturesRunnable;
import de.schildbach.oeffi.stations.Station; import de.schildbach.oeffi.stations.Station;
import de.schildbach.oeffi.stations.StationContextMenu; import de.schildbach.oeffi.stations.StationContextMenu;
import de.schildbach.oeffi.util.Formats; import de.schildbach.oeffi.util.Formats;
import de.schildbach.pte.NetworkId;
import de.schildbach.pte.Standard; import de.schildbach.pte.Standard;
import de.schildbach.pte.dto.Departure; import de.schildbach.pte.dto.Departure;
import de.schildbach.pte.dto.Line; import de.schildbach.pte.dto.Line;
@ -83,7 +82,6 @@ public class StationViewHolder extends RecyclerView.ViewHolder {
private final Context context; private final Context context;
private final Resources res; private final Resources res;
private final NetworkId network;
private final int maxDepartures; private final int maxDepartures;
private final StationContextMenuItemListener contextMenuItemListener; private final StationContextMenuItemListener contextMenuItemListener;
@ -96,8 +94,8 @@ public class StationViewHolder extends RecyclerView.ViewHolder {
private static final int CONDENSE_LINES_THRESHOLD = 6; // TODO!!! private static final int CONDENSE_LINES_THRESHOLD = 6; // TODO!!!
private static final int MESSAGE_INDEX_COLOR = Color.parseColor("#c08080"); private static final int MESSAGE_INDEX_COLOR = Color.parseColor("#c08080");
public StationViewHolder(final Context context, final View itemView, final NetworkId network, public StationViewHolder(final Context context, final View itemView, final int maxDepartures,
final int maxDepartures, final StationContextMenuItemListener contextMenuItemListener) { final StationContextMenuItemListener contextMenuItemListener) {
super(itemView); super(itemView);
favoriteView = itemView.findViewById(R.id.station_entry_favorite); favoriteView = itemView.findViewById(R.id.station_entry_favorite);
@ -114,7 +112,6 @@ public class StationViewHolder extends RecyclerView.ViewHolder {
this.context = context; this.context = context;
this.res = context.getResources(); this.res = context.getResources();
this.network = network;
this.maxDepartures = maxDepartures; this.maxDepartures = maxDepartures;
this.contextMenuItemListener = contextMenuItemListener; this.contextMenuItemListener = contextMenuItemListener;
@ -191,13 +188,13 @@ public class StationViewHolder extends RecyclerView.ViewHolder {
contextButtonSpace.setVisibility(itemView.isActivated() ? View.VISIBLE : View.GONE); contextButtonSpace.setVisibility(itemView.isActivated() ? View.VISIBLE : View.GONE);
contextButton.setOnClickListener(itemView.isActivated() ? new View.OnClickListener() { contextButton.setOnClickListener(itemView.isActivated() ? new View.OnClickListener() {
public void onClick(final View v) { public void onClick(final View v) {
final PopupMenu contextMenu = new StationContextMenu(context, v, network, station.location, favState, final PopupMenu contextMenu = new StationContextMenu(context, v, station.network, station.location,
true, true, true, true, true); favState, true, true, true, true, true);
contextMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() { contextMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(final MenuItem item) { public boolean onMenuItemClick(final MenuItem item) {
final int position = getAdapterPosition(); final int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) if (position != RecyclerView.NO_POSITION)
return contextMenuItemListener.onStationContextMenuItemClick(position, network, return contextMenuItemListener.onStationContextMenuItemClick(position, station.network,
station.location, station.departures, item.getItemId()); station.location, station.departures, item.getItemId());
else else
return false; return false;

View file

@ -26,7 +26,6 @@ import de.schildbach.oeffi.R;
import de.schildbach.oeffi.StationsAware; import de.schildbach.oeffi.StationsAware;
import de.schildbach.oeffi.stations.CompassNeedleView; import de.schildbach.oeffi.stations.CompassNeedleView;
import de.schildbach.oeffi.stations.Station; import de.schildbach.oeffi.stations.Station;
import de.schildbach.pte.NetworkId;
import de.schildbach.pte.dto.Product; import de.schildbach.pte.dto.Product;
import android.content.Context; import android.content.Context;
@ -37,7 +36,6 @@ import androidx.recyclerview.widget.RecyclerView;
public class StationsAdapter extends RecyclerView.Adapter<StationViewHolder> implements CompassNeedleView.Callback { public class StationsAdapter extends RecyclerView.Adapter<StationViewHolder> implements CompassNeedleView.Callback {
private final Context context; private final Context context;
private final NetworkId network;
private final int maxDepartures; private final int maxDepartures;
private final Set<Product> productsFilter; private final Set<Product> productsFilter;
private final StationContextMenuItemListener contextMenuItemListener; private final StationContextMenuItemListener contextMenuItemListener;
@ -50,11 +48,9 @@ public class StationsAdapter extends RecyclerView.Adapter<StationViewHolder> imp
private final LayoutInflater inflater; private final LayoutInflater inflater;
public StationsAdapter(final Context context, final NetworkId network, final int maxDepartures, public StationsAdapter(final Context context, final int maxDepartures, final Set<Product> productsFilter,
final Set<Product> productsFilter, final StationContextMenuItemListener contextMenuItemListener, final StationContextMenuItemListener contextMenuItemListener, final StationsAware stationsAware) {
final StationsAware stationsAware) {
this.context = context; this.context = context;
this.network = network;
this.inflater = LayoutInflater.from(context); this.inflater = LayoutInflater.from(context);
this.maxDepartures = maxDepartures; this.maxDepartures = maxDepartures;
this.productsFilter = productsFilter; this.productsFilter = productsFilter;
@ -97,7 +93,7 @@ public class StationsAdapter extends RecyclerView.Adapter<StationViewHolder> imp
@Override @Override
public StationViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) { public StationViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) {
return new StationViewHolder(context, inflater.inflate(R.layout.stations_station_entry, parent, false), network, return new StationViewHolder(context, inflater.inflate(R.layout.stations_station_entry, parent, false),
maxDepartures, contextMenuItemListener); maxDepartures, contextMenuItemListener);
} }