gpt4 book ai didi

java - 在滚动Recycleview中实现onclick

转载 作者:行者123 更新时间:2023-12-02 09:36:34 26 4
gpt4 key购买 nike

我有设置为自动滚动的recycleview。我希望实现 onclicklistener 以便打开新 Activity 。

这是我的回收 View


final int duration = 10;
final int pixelsToMove = 30;
private final Handler mHandler = new Handler(Looper.getMainLooper());
private final Runnable SCROLLING_RUNNABLE = new Runnable() {

@Override
public void run() {
top.smoothScrollBy(pixelsToMove, 0);
mHandler.postDelayed(this, duration);
}
};


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_home, container, false);

top = (RecyclerView) view.findViewById(R.id.top);

final LinearLayoutManager llm = new LinearLayoutManager(getActivity(),LinearLayoutManager.HORIZONTAL,false);
top.setLayoutManager(llm);
top.setHasFixedSize(true);
staggeredBooksAdapter = new TopAdapter(this, bookslist);

top.setAdapter(staggeredBooksAdapter);

//Recycleview
top.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState); }

@Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int lastItem = llm.findLastCompletelyVisibleItemPosition();
if(lastItem == llm.getItemCount()-1){
mHandler.removeCallbacks(SCROLLING_RUNNABLE);
Handler postHandler = new Handler();
postHandler.postDelayed(new Runnable() {
@Override
public void run() {
top.setAdapter(null);
top.setAdapter(staggeredBooksAdapter);
mHandler.postDelayed(SCROLLING_RUNNABLE, 6000);
}}, 6000);
}
}
});
mHandler.postDelayed(SCROLLING_RUNNABLE, 6000);

我的适配器类是

public class TopAdapter extends RecyclerView.Adapter<TopAdapter.MyViewHolder> {
ArrayList<location> bookslist;
CardView cv;
location g;
private Home context;


public TopAdapter(Home context, ArrayList<location> bookslist){
this.bookslist = bookslist;
this.context = context; // add this as a field in your adapter class.
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_top,parent,false);
return new MyViewHolder(v);
}

public class MyViewHolder extends RecyclerView.ViewHolder {
TextView teacher_name,teacher_location;
LinearLayout profile_details;
ImageView iv;

MyViewHolder(final View itemView) {
super(itemView);
cv = (CardView) itemView.findViewById(R.id.teacher_name);
teacher_location = (TextView)
}
}

@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {

database = FirebaseDatabase.getInstance();

g = bookslist.get(position);

holder.teacher_name.setText(g.getSellername());

holder.profile_details.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
g = bookslist.get(position);
Intent intent = new Intent(v.getContext(), gender_details.class);

intent.putExtra(KEY_NAME, g.getSellername());
v.getContext().startActivity(intent);
}
});


@Override
public int getItemCount() {
return bookslist.size();
}
}

当我重复单击时,我可以根据位置打开包含详细信息的新 Activity ,但我不知道它是如何发生的,并且只有在重复单击某个项目后才能重现相同的效果。但这种情况并不经常发生。我正在寻找永久解决方案,当我单击回收 View 列表中的任何项目时打开新 Activity 。

提前致谢。

最佳答案

您的 onClickListener 设置为名为 profile_details 的 View ,并且仅当您点击(确切地说)此 View 时才会触发它。您的某些元素可能会与此 View 重叠,因此您的点击不起作用。它解释了在项目的不同部分进行随机次数的点击后您的 startActivity 触发了什么。

尝试调试 View 上的点击并将此 onItemClickListener 设置为适当的 View/ViewGroup

附:另外,我的建议是不要在适配器内存储任何与数据库相关的对象(这违反了单一责任)。

将 Activity 启动逻辑存储在适配器中也是不好的做法。请参阅这个答案:Can't resolve the Context or Application while navigating from Adapter of a fragment(A) to another Fragment (B)

希望对你有帮助:)

关于java - 在滚动Recycleview中实现onclick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57465630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com