这是对this post的一种跟进或补充。我想在我的RecyclerView中找到一个项目的位置,但我尝试过的方法都没有。
我在 *Case #1
10 20
X
X
XXX
*Case #2: Shape
7 7
XX
XX
X
构造函数中调用getAdapterPosition()
并将其值分配给整数位置,该位置在PersonViewHolder
类中用于相应地执行某些操作(请参阅UnitOneFragment
方法)。但无论如何,它都不会发生,我的猜测是因为onClick()
方法不起作用或使用不正确。
我的适配器:
getAdapterPosition()
另一堂课:
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> {
Context mContext;
RVAdapter(Context context, List<Chapter> chapters) {
mContext = context;
this.chapters = chapters;
}
public static CardView cv;
public static int position;
public static String chapterNumberTitle;
public class PersonViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView chapterName;
TextView chapterNumber;
// ImageView chapterPhoto;
public PersonViewHolder(View itemView) {
super(itemView);
cv = (CardView) itemView.findViewById(R.id.cv);
chapterName = (TextView) itemView.findViewById(R.id.chapter_name);
chapterNumber = (TextView) itemView.findViewById(R.id.chapter_number);
// chapterPhoto = (ImageView) itemView.findViewById(R.id.person_photo);
chapterNumberTitle = chapterNumber.getText().toString();
position = getAdapterPosition();
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
UnitOneFragment.chapterChecker();
Intent intent = new Intent(mContext, ChapterActivity.class);
mContext.startActivity(intent);
}
}
List<Chapter> chapters;
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
@Override
public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);
PersonViewHolder pvh = new PersonViewHolder(v);
return pvh;
}
@Override
public void onBindViewHolder(PersonViewHolder personViewHolder, int i) {
personViewHolder.chapterName.setText(chapters.get(i).chapterName);
personViewHolder.chapterNumber.setText(chapters.get(i).chapterNumber);
// personViewHolder.chapterPhoto.setImageResource(persons.get(i).photoId);
}
@Override
public int getItemCount() {
return chapters.size();
}
}
我的代码似乎很明显,但是如果有什么令人困惑的话,请告诉我,我会添加更多信息。再一次,问题是我无法在RecyclerView中获取该项目的位置,然后对其采取行动。
答案 0 :(得分:15)
在getAdapterPosition()
方法中调用onClick()
,因为在点击时您想知道项目的位置。如果您在创建时检查它(大多数时间)将是不准确的。
答案 1 :(得分:0)
我是否可以使用viewHolder.mView.setOnClickListener()
获取点击事件,然后使用viewHolder.getAdapterPosition ()
获取该位置。如何从我点击的项目中获取一些数据,例如名称。
示例complet:
答案 2 :(得分:0)
private func checkPatientPdfIsPresentOrNot(selectedPatient: String) -> Bool {
let fileManager = FileManager.default
do {
let documentsURL = try fileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let fileURLs = try fileManager.contentsOfDirectory(at: documentsURL, includingPropertiesForKeys: [.nameKey], options: .skipsHiddenFiles)
return fileURLs.first(where: { url -> Bool in
let fileName = url.deletingPathExtension().lastPathComponent
return fileName.components(separatedBy: "_").first == selectedPatient.capitalized
}) != nil
} catch { print(error); return false }
}