사용자가 RecyclerView
항목을 클릭안드로이드 - 이미지에 뷰를 추가하는 업데이트하지 않습니다 - 온 클릭을
, 나는이 BAAS에 저장된 정보에서 해당 이미지에 태그를 추가하고 싶습니다 요약 [Sashido] (X 좌표, Y 좌표 및 태그 이름). 하지만, 내가 겪고있는 문제는 말로는 입장을 얻지 못하고있다. 이미지를 클릭 할 때 토스트를 만들고 뷰 자체에 해당하는 올바른 위치를 표시합니다. (시작 부분은 0 등)
그러나 사용자가 목록의 다른 항목을 클릭하면 Sashido의 배열 위치에 해당하는 태그가 일치하도록 위치를 업데이트하는 방법 위치는 RecyclerView
입니다. Sashido 클래스의 첫 번째 행은 모든 이미지에 해당 행의 태그를 채우고 있기 때문입니다.
내 가정은 패스 objects.get(position)
배열이 호출 될 때 그래서, 그것은 Sashido 클래스의 같은 위치를 얻을 수 있습니다 것을 getLayoutPosition()
를 사용하여 getTagInformation()
방법에 위치했지만 그것을하지 않습니다. 사용자가 새 항목을 클릭 한 후 어댑터가 올바르게 업데이트되어서는 안된다고 생각합니다.
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();
}
}
});
}
t 메소드에 전달 된 imageId
와
public void getTagInformation(String imageid) {
ParseQuery query = ParseQuery.getQuery("FashionFeed");
query.WhereEqualTo("objectId", imageId);
....
}
리 에드도 나 수동으로 일치한다는 objectId
를 입력으로, 아직 해당 objectId
에 속하는 태그를 생성 할 수 있습니다. 이 쿼리가 모든 개체를 통과하고있는 것 같지 않습니다. 해당 개체에서 태그 정보를 가져온 다음 해당 태그가있는 모든 이미지를 설정하면됩니다.
더 이상 코드를 제공해야하는 경우 더 이상 행복합니다.
데이터베이스에서 objectId를 수동으로 넣으면 정확한 태그가 나타나지만 여전히 모든 이미지에 표시됩니다. 그래서 나는 그것이 쿼리라고 생각하지 않습니다. 그것은 내가 필요로하는 모든 정보를 얻지 만 오직 한 세트의 태그만을위한 것입니다. 반드시 getTagInformation() 메소드 외부에 있어야합니다. – BIW