RecyclerView中的多行EditText滚动问题

问题描述 投票:6回答:2

我有一个RecyclerView,其中包含多行EditText作为列表项,每次添加一行时EditText都会展开。 RecyclerView具有标准的垂直LinearLayoutManager和带有15个EditText列表项的标准RecyclerView.Adapter<RecyclerView.ViewHolder>适配器。我将在问题的末尾添加代码。

问题是,在EditText中添加了多行之后,每次添加一行时,它就会开始向下滚动列表。最终,在添加了足够的新行之后,EditText将滚动到屏幕顶部并失去焦点。如果尝试向上滚动并选择EditText的最后一行,它将向下滚动列表,直到EditText离开屏幕顶部并且失去焦点。

这对ListView不是问题,仅对RecyclerView而言。

有人知道如何解决或解决此问题吗?

订单项:

<EditText xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:inputType="textMultiLine|textCapSentences"
      android:gravity="top"
      android:hint="Enter text"
      android:minLines="2"
      android:layout_margin="16dp"/>

The RecyclerViewFragment和适配器

public class RecyclerViewFragment extends Fragment
{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        View view = inflater.inflate(R.layout.recycler_view_fragment, container, false);

        RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
        recyclerView.setAdapter(new MyAdapter());
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

        return view;
    }

    private class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
    {
        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
        {
            View view = getActivity().getLayoutInflater().inflate(R.layout.edit_text_list_item, parent, false);

            MyViewHolder holder = new MyViewHolder(view);
            return holder;
        }

        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position)
        {

        }

        @Override
        public int getItemCount()
        {
            return 15;
        }

        private class MyViewHolder extends RecyclerView.ViewHolder
        {

            public MyViewHolder(View itemView)
            {
                super(itemView);
            }
        }
    }
}
android android-listview android-edittext android-recyclerview multiline
2个回答
3
投票

此问题已由最新版本的RecyclerView解决:22.2.0


0
投票

EditTextView.setOnTouchListener(new View.OnTouchListener(){

public boolean onTouch(View v, MotionEvent event) {
    // Disallow the touch request for parent scroll on touch of child view
    v.getParent().requestDisallowInterceptTouchEvent(true);
    return false;
}

});

© www.soinside.com 2019 - 2024. All rights reserved.