Резюме
Когда пользователь нажимает на элемент RecyclerView, я хотел бы добавить теги к этому изображению из информации, которая была сохранена в BaaS [Sashido] (координаты X, координаты Y и имя тега), Но проблема, с которой я столкнулась, - это не нахождение позиции. Я создаю тост при щелчке изображения, он показывает правильное положение, соответствующее самому представлению. (ноль для начала, так далее и т.д.)
Но как обновить позицию после того, как пользователь нажмет на другой элемент в списке, так что теги, которые соответствуют позиции в массиве в Sashido, соответствуют позиции в RecyclerView, потому что в настоящий момент первая строка в классе Sashido заполняет все изображения тегами строк.
Мое предположение состояло в том, чтобы передать позицию методу getTagInformation(), используя getLayoutPosition(), чтобы при вызове массива objects.get(position) он получил ту же позицию для класса Sashido, но это не так. Я чувствую, что адаптер не должен обновляться после того, как пользователь нажал на новый элемент.
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;
}
}
});
... }
getTagИнформация:
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();
}
}
});
}
Я также пробовал
public void getTagInformation(String imageid) {
ParseQuery query = ParseQuery.getQuery("FashionFeed");
query.WhereEqualTo("objectId", imageId);
....
}
с imageId, переданным в метод, а также я вручную введя objectId, который будет соответствовать, он все равно будет генерировать теги, принадлежащие этому objectId. просто не кажется, что этот запрос проходит через все объекты. Просто получая информацию тега от этого одного объекта, а затем устанавливая все изображения с этими тегами.
если вам нужно, чтобы я предоставил больше кода, я более чем счастлив.