Резюме
Когда пользователь нажимает на элемент 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
. просто не кажется, что этот запрос проходит через все объекты. Просто получая информацию тега от этого одного объекта, а затем устанавливая все изображения с этими тегами.
если вам нужно, чтобы я предоставил больше кода, я более чем счастлив.