ZusammenfassungAndroid - Ansichten auf dem Hinzufügen von Bildern nicht aktualisiert - onClick
Wenn ein Benutzer auf das RecyclerView
Element klickt, würde ich Tags wie aus den Informationen zu diesem Bild hinzuzufügen, die in einem BaaS gespeichert wurden [Sashido] (X-Koordinaten, Y-Koordinaten und Tag-Name). Aber das Problem, das ich habe, ist nicht die Position per-say. Ich erstelle einen Toast, wenn das Bild angeklickt wurde, es zeigt die korrekte Position an, die der Ansicht selbst entspricht. (Null für den Anfang, so weiter und so weiter)
Aber wie man die Position aktualisiert, sobald der Benutzer auf ein anderes Element in der Liste klickt, damit die Tags, die der Position im Array in Sashido entsprechen, übereinstimmen Position in der RecyclerView
, weil im Moment die erste Zeile in der Sashido-Klasse alle Bilder mit den Tags dieser Zeile bevölkert.
Meine Vermutung war auf der Passhöhe die Position in die getTagInformation()
Methode getLayoutPosition()
so, dass, wenn objects.get(position)
Array genannt wird, wird es die gleiche Position für Sashido Klasse erhalten, aber es ist nicht. Ich denke, der Adapter muss nicht korrekt aktualisiert werden, nachdem der Benutzer auf ein neues Element geklickt hat.
onBindViewHolder:
@Override
public void onBindViewHolder(RecyclerViewHolderPreviousPosts holder, int position) {
holder.bind(previousPostsList.get(position), listener);
}
onBind:
void bind(final PreviousPostsDataModel model, final OnItemClickListener listener) { ...
uploadedImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (count == 0) {
imageid = model.getImageId();
Toast.makeText(App.getContext(), "Image ID: " + imageid, Toast.LENGTH_SHORT).show();
Toast.makeText(App.getContext(), "Position: " + getAdapterPosition(), Toast.LENGTH_SHORT).show();
getTagInformation(getLayoutPosition());
} else {
Log.e("qwert", "" + imageid);
imageContainer.removeAllViews();
imageContainer.addView(uploadedImage);
count = 0;
}
}
});
... }
getTagInformation:
private void getTagInformation(final int position) {
ParseQuery<ParseObject> query = ParseQuery.getQuery("FashionFeed");
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> objects, ParseException e) {
if (e == null) {
Toast.makeText(context, "" + position, Toast.LENGTH_SHORT).show();
JSONArray tagNamesArray = objects.get(position).getJSONArray("tagName");
JSONArray posXArray = objects.get(position).getJSONArray("tagPointX");
JSONArray posYArray = objects.get(position).getJSONArray("tagPointY");
for (int i = 0; i < tagNamesArray.length(); i++) {
for (int t = 0; t < tagNamesArray.length(); t++) {
tagNames.add(tagNamesArray.optString(t));
tagXPositions.add(posXArray.optString(t));
tagYPositions.add(posYArray.optString(t));
}
for (int o = 0; o < tagNamesArray.length(); o++) {
tag = new TextView(App.getContext());
tag.setX(Float.parseFloat(tagXPositions.get(o)));
tag.setY(Float.parseFloat(tagYPositions.get(o)));
tag.setText(tagNames.get(o));
tag.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
tag.setMaxLines(1);
tag.setTextSize(11);
tag.setClickable(true);
tag.setHintTextColor(Color.WHITE);
tag.setTextColor(Color.WHITE);
tag.setBackgroundResource(R.drawable.tags_rounded_corners);
imageContainer.addView(tag);
count = 1;
}
}
} else {
Toast.makeText(context, "" + e.getMessage(), Toast.LENGTH_LONG).show();
}
}
});
}
Ich habe auch t ried
public void getTagInformation(String imageid) {
ParseQuery query = ParseQuery.getQuery("FashionFeed");
query.WhereEqualTo("objectId", imageId);
....
}
mit den imageId
in die Methode übergeben und mit auch passe auf manuell ein objectId
Eingabe, die ich, wird es nach wie vor nur die Tags erzeugen, die zu diesen objectId
gehören. Es scheint einfach nicht, dass diese Abfrage alle Objekte durchläuft. Ermittelt nur die Tag-Informationen von diesem einen Objekt und setzt dann alle Bilder mit diesen Tags.
Wenn Sie mich brauchen, um mehr Code zur Verfügung zu stellen, bin ich mehr als glücklich.
Ich tat dies, wenn ich die objectId manuell aus der Datenbank einfüge, die richtigen Tags erscheinen aber immer noch für alle Bilder. Also ich glaube nicht, dass es die Abfrage ist. es bekommt alle Informationen, die ich brauche, aber für nur einen Satz von Tags. sicherlich muss es außerhalb der 'getTagInformation()' Methode sein. – BIW