【问题标题】:how to scroll to next item by clicking on a checkbox in each item (recyclerview)如何通过单击每个项目中的复选框滚动到下一个项目(recyclerview)
【发布时间】:2017-10-23 01:45:36
【问题描述】:

请原谅我的英语。

我的清单包含 100 项。每个项目由两个复选框组成,每次单击复选框时我都想滚动到下一个项目。

如果这个问题已经回答,请给我最佳答案链接

这是我的自定义适配器

 public class CustomAdapter extends 
       RecyclerView.Adapter<CustomAdapter.MyViewHolder> {

private ArrayList answerFirst;
private ArrayList answerSecond;
private Context context;

public CustomAdapter(Context  context, ArrayList questionList, ArrayList 
answerFirst, ArrayList answerSecond) {
    this.context = context;
    this.answerFirst = answerFirst;
    this.answerSecond = answerSecond;
}

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

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

        holder.firstanswer.setText(answerFirst.get(position).toString());
        holder.secondanswer.setText(answerSecond.get(position).toString());
    }

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

public class MyViewHolder extends RecyclerView.ViewHolder {
    TextView question;
    CheckBox firstanswer;
    CheckBox secondanswer;
    public MyViewHolder(View itemView) {
        super(itemView);
        question = (TextView) itemView.findViewById(R.id.question_text);
        firstanswer = (CheckBox) itemView.findViewById(R.id.first_answer);
        secondanswer = (CheckBox) itemView.findViewById(R.id.second_answer);
             }
        }
   }

这是主要活动

 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_start_test);

    final RecyclerView recyclerView = (RecyclerView) 
    findViewById(R.id.recyclerView_test);
    final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(linearLayoutManager); 

    final CustomAdapter customAdapter = new CustomAdapter(mainActivity.this, answerFirst,answerSecond);
    recyclerView.setAdapter(customAdapter);
}

【问题讨论】:

  • 你为什么使用getApplicationContext()?不要用那个,Contexts的类型是有区别的。使用应用程序上下文可能会导致内存泄漏,因为应用程序上下文会比其他任何东西停留更长时间,并且可能使您的Activity 无法被销毁,从而导致内存问题。
  • @Sakiboy 谢谢你的建议

标签: android android-recyclerview custom-adapter android-viewholder


【解决方案1】:

您可以通过使主类中的适配器类和复选框的侦听器方法滚动到所需位置来做到这一点,因为 RecyclerView 是一个全局变量,您可以访问它并滚动到所需位置。

rv.scrollToPosition(youPositionInTheAdapter)

否则在构造函数中传递 RecyclerView 的实例并执行相同的操作

并通过getAdapterPosition()获取适配器内的当前项目位置

或者你可以用这样的布局管理器来做

rv.getLayoutManager().scrollToPosition(youPositionInTheAdapter)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多