Java 使用回收器视图适配器的项目列表的点击调用错误?
我有一个包含三个片段的活动,每个片段都有一个单独的Java 使用回收器视图适配器的项目列表的点击调用错误?,java,android,android-fragments,Java,Android,Android Fragments,我有一个包含三个片段的活动,每个片段都有一个单独的RecyclerView和一堆项目。在片段之间滚动时,onClick()会混淆,单击片段1中的项目会转到相同的位置,但对于片段3中的项目,因此会将我带到错误的屏幕。我是否应该在我设置的自定义onClick()方法中区分页面?所有的片段都使用同一个适配器,所以我不确定这是否是原因之一?不确定什么代码在这里有用,但下面是我的适配器类: public class ExploreAdapter extends RecyclerView.Adapter&l
RecyclerView
和一堆项目。在片段之间滚动时,onClick()
会混淆,单击片段1中的项目会转到相同的位置,但对于片段3中的项目,因此会将我带到错误的屏幕。我是否应该在我设置的自定义onClick()
方法中区分页面?所有的片段都使用同一个适配器,所以我不确定这是否是原因之一?不确定什么代码在这里有用,但下面是我的适配器类:
public class ExploreAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static OnEntryClickListener mOnEntryClickListener;
private List<Explore> exploreList;
private List<String> trackedProjects;
private Context context;
private Typeface typeFace, italicTypeface, boldTypeface;
private int typeOfExplore;
private HashMap<String, Boolean> uniqueExploreItems;
private HashMap<String, Long> offSet;
private int firstSet, secondSet;
private boolean apiProcessing;
private String stringValue;
//firebase
private DatabaseReference mDatabase;
public void changeTracked(List<String> tracks) {
trackedProjects = tracks;
notifyDataSetChanged();
}
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView projectTitle, projectCompany;
public ImageView projectPicture;
private ShineButton projectTrack;
public MyViewHolder(View view) {
super(view);
projectTitle = (TextView) view.findViewById(R.id.exploreProjectTitle);
projectCompany = (TextView) view.findViewById(R.id.exploreProjectCompany);
projectPicture = (ImageView) view.findViewById(R.id.exploreProjectPicture);
projectTrack = (ShineButton) view.findViewById(R.id.exploreProjectTrack);
view.setOnClickListener(this);
projectTrack.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (mOnEntryClickListener != null) {
mOnEntryClickListener.onEntryClick(v, getAdapterPosition());
}
}
}
public ExploreAdapter(Context mContext, List<Explore> explores, List<String> trackedProj, int typeOfE, String strV, HashMap<String, Boolean> uniqueE, HashMap<String, Long> offs, Typeface myTypeface, Typeface myTypefaceItalic, Typeface myTypefaceBold) {
context = mContext;
exploreList = explores;
typeFace = myTypeface;
italicTypeface = myTypefaceItalic;
boldTypeface = myTypefaceBold;
typeOfExplore = typeOfE;
uniqueExploreItems = uniqueE;
offSet = offs;
stringValue = strV;
apiProcessing = true;
mDatabase = FirebaseDatabase.getInstance().getReference();
trackedProjects = trackedProj;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new MyViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.explore_item, parent, false));
}
public void setOnEntryClickListener(OnEntryClickListener onEntryClickListener) {
mOnEntryClickListener = onEntryClickListener;
}
public interface OnEntryClickListener {
void onEntryClick(View view, int position);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
MyViewHolder myViewHolder = (MyViewHolder) holder;
Explore proj = exploreList.get(position);
myViewHolder.projectTitle.setTypeface(boldTypeface);
myViewHolder.projectCompany.setTypeface(italicTypeface);
myViewHolder.projectTitle.setText(proj.getProjectTitle());
myViewHolder.projectCompany.setText(proj.getSubTitle());
//for updates
if(typeOfExplore == 1) {
String createImagePath = Constants.PHASES_IMAGE + proj.getProjectPicture();
Picasso.with(context).load(createImagePath).placeholder(R.drawable.default_liovinci_bg).resize(320, 240).into(myViewHolder.projectPicture);
} else {
String createImagePath = Constants.PROJECT_IMAGE + proj.getProjectPicture();
Picasso.with(context).load(createImagePath).placeholder(R.drawable.default_liovinci_bg).resize(320, 240).into(myViewHolder.projectPicture);
}
if(typeOfExplore == 1 || typeOfExplore == 2) {
myViewHolder.projectTrack.setVisibility(View.GONE);
} else {
if(trackedProjects != null && trackedProjects.contains(proj.getProjectId())) {
myViewHolder.projectTrack.setColorFilter(ContextCompat.getColor(context, R.color.actionBlue), PorterDuff.Mode.SRC_IN);
myViewHolder.projectTrack.setChecked(true);
} else {
myViewHolder.projectTrack.setColorFilter(ContextCompat.getColor(context, R.color.bottomBarGray), PorterDuff.Mode.SRC_IN);
}
}
公共类ExploreAdapter扩展了RecyclerView.Adapter{
私有静态OnEntryClickListener mOnEntryClickListener;
私人名单探索者;
私人名单跟踪项目;
私人语境;
专用字体、斜体、黑体;
私人int型探索;
私有HashMap uniqueExploreItems;
私有哈希映射偏移量;
私有int第一集,第二集;
私有布尔处理;
私有字符串字符串值;
//火基
私有数据库参考数据库;
公共无效更改跟踪(列出跟踪){
trackedProjects=轨道;
notifyDataSetChanged();
}
公共类MyViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
公共文本视图项目标题,项目公司;
公共图像查看项目图片;
私人ShineButton项目轨道;
公共MyViewHolder(视图){
超级(视图);
projectTitle=(TextView)view.findViewById(R.id.exploreProjectTitle);
projectCompany=(TextView)view.findViewById(R.id.exploreProjectCompany);
projectPicture=(ImageView)view.findViewById(R.id.exploreProjectPicture);
projectTrack=(ShineButton)view.findViewById(R.id.exploreProjectTrack);
view.setOnClickListener(这个);
projectTrack.setOnClickListener(这个);
}
@凌驾
公共void onClick(视图v){
if(mOnEntryClickListener!=null){
onentryclicklistener.onEntryClick(v,getAdapterPosition());
}
}
}
public ExploreAdapter(Context mContext、List explores、List trackedProj、int typeOfE、String strV、HashMap uniqueE、HashMap offs、Typeface myTypeface、Typeface mytypeitalic、Typeface mytypebold){
上下文=mContext;
exploreList=探索;
字体=我的字体;
italicTypeface=MyTypeface Italic;
粗体字=我的粗体字;
typeOfExplore=typeOfE;
uniqueExploreItems=uniqueE;
偏移=偏移;
stringValue=strV;
apiProcessing=true;
mDatabase=FirebaseDatabase.getInstance().getReference();
trackedProjects=trackedProj;
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
返回新的MyViewHolder(LayoutInflater.from(parent.getContext())
.充气(R.layout.explore_项,父项,false));
}
公共无效设置OnEntryClickListener(OnEntryClickListener OnEntryClickListener){
mOnEntryClickListener=onEntryClickListener;
}
公共接口OnEntryClickListener{
void onEntryClick(视图,int位置);
}
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder,int位置){
MyViewHolder MyViewHolder=(MyViewHolder)holder;
Explore proj=exploreList.get(位置);
myViewHolder.projectTitle.setTypeface(粗体);
myViewHolder.projectCompany.setTypeface(斜体);
myViewHolder.projectTitle.setText(proj.getProjectTitle());
myViewHolder.projectCompany.setText(proj.getSubTitle());
//更新
if(typeOfExplore==1){
字符串createImagePath=Constants.PHASES_IMAGE+proj.getProjectPicture();
毕加索.with(context).load(createImagePath).placeholder(R.drawable.default_liovinci_bg).resize(320240).into(myViewHolder.projectPicture);
}否则{
字符串createImagePath=Constants.PROJECT_IMAGE+proj.getProjectPicture();
毕加索.with(context).load(createImagePath).placeholder(R.drawable.default_liovinci_bg).resize(320240).into(myViewHolder.projectPicture);
}
if(typeOfExplore==1 | | typeOfExplore==2){
myViewHolder.projectTrack.setVisibility(View.GONE);
}否则{
if(trackedProjects!=null&&trackedProjects.contains(proj.getProjectId()){
myViewHolder.projectTrack.setColorFilter(ContextCompat.getColor(context,R.color.actionBlue),PorterDuff.Mode.SRC_-IN);
myViewHolder.projectTrack.setChecked(true);
}否则{
myViewHolder.projectTrack.setColorFilter(ContextCompat.getColor(context,R.color.bottomBarGray),PorterDuff.Mode.SRC_-IN);
}
}
如果您使用的是视图寻呼机,则它将初始化您绑定到该视图寻呼机的所有片段。因此,最后它将初始化最后一个片段,并且适配器类将包含来自上一个初始化片段的上下文
这就是原因。为了克服您的问题,您应该为不同的片段制作不同的适配器。请参阅