Пожалуйста, дайте мне знать, как решить ошибку RecyclerView с помощью Handler - PullRequest
0 голосов
/ 19 июня 2020

Я работаю над приложением в студии Android. На экране фрагмента есть два RecyclerView. Этот RecyclerView был создан со ссылкой на адрес ниже. (https://github.com/MrTangBo/TbLibraryDemo/blob/96461246d7a6d42e818dfa259889e58d585ed553/tblibrary/src/main/java/com/tb/library/tbAutoScroll/SmoothScrollLayout.java)

Однако этот код работает только для 1 RecyclerView. Фрагмент не работает как изображение, когда RecyclerView растягивается до 2 или более.

введите здесь описание изображения

Я хотел услышать решение этой проблемы, поэтому я спросил вас вопрос.

Ниже мой код.

public class QhqrlFragment extends Fragment {
    private ArrayList<QhqrlRecyclerViewItem> list = new ArrayList<>();
    private Context mContext;
    FragmentQhqrlBinding binding;

    private ScrollHandler mHandler;
    private QhqrlRecyclerViewAdapter mAdapter;

    public QhqrlFragment() {
        // Required empty public constructor
    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        mContext = context;
    }

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

        RecyclerView_setLayout(binding.smoothRecyclerView);


        // **** Adding this code gives an error. ****
        // RecyclerView_setLayout(binding.smoothRecyclerView2);

        return view;
    }

    public void RecyclerView_setLayout(RecyclerView recyclerView) {
        mHandler = new ScrollHandler(this);
        mAdapter = new QhqrlRecyclerViewAdapter();
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.setAdapter(mAdapter);

        QhqrlRecyclerViewItem data = new QhqrlRecyclerViewItem("a", "d");
        list.add(data);
        data = new QhqrlRecyclerViewItem("b", "c");
        list.add(data);
        data = new QhqrlRecyclerViewItem("c", "b");
        list.add(data);
        data = new QhqrlRecyclerViewItem("d", "a");
        list.add(data);

        setQhqrlData(list);
    }

    public void setQhqrlData(ArrayList<QhqrlRecyclerViewItem> data) {
        mAdapter.setList(data);
        if (data != null) {
            mHandler.sendEmptyMessageDelayed(0, 100);
        }
    }

    public void smoothScroll() {
        binding.smoothRecyclerView.smoothScrollBy(0, 5);
        binding.smoothRecyclerView2.smoothScrollBy(0, 5);
        mHandler.sendEmptyMessageDelayed(0, 100);
    }
}

class ScrollHandler extends Handler {
    private WeakReference<QhqrlFragment> view;

    public ScrollHandler(QhqrlFragment mView) {
        view = new WeakReference<>(mView);
    }

    @Override
    public void handleMessage(@NonNull Message msg) {
        super.handleMessage(msg);
        if (view.get() != null) {
            view.get().smoothScroll();
        }
    }
}

Это Logcat.

2020-06-19 16:42:30.406 14112-14112/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.myapplication, PID: 14112
    java.lang.OutOfMemoryError: Failed to allocate a 105328 byte allocation with 82952 free bytes and 81KB until OOM, max allowed footprint 201326592, growth limit 201326592
        at android.view.ViewGroup.addInArray(ViewGroup.java:5214)
        at android.view.ViewGroup.addViewInner(ViewGroup.java:5144)
        at android.view.ViewGroup.addView(ViewGroup.java:4953)
        at android.view.ViewGroup.addView(ViewGroup.java:4893)
        at androidx.recyclerview.widget.RecyclerView$5.addView(RecyclerView.java:856)
        at androidx.recyclerview.widget.ChildHelper.addView(ChildHelper.java:107)
        at androidx.recyclerview.widget.RecyclerView$LayoutManager.addViewInt(RecyclerView.java:8601)
        at androidx.recyclerview.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:8559)
        at androidx.recyclerview.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:8547)
        at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1641)
        at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
        at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
        at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3540)
        at android.view.View.measure(View.java:23300)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
        at android.view.View.measure(View.java:23300)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
        at android.view.View.measure(View.java:23300)
        at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:2226)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at android.widget.ScrollView.onMeasure(ScrollView.java:566)
        at android.view.View.measure(View.java:23300)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6928)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
        at android.view.View.measure(View.java:23300)
        at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1638)
        at android.view.View.layout(View.java:20844)
        at android.view.ViewGroup.layout(ViewGroup.java:6401)
        at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1080)
        at android.view.View.layout(View.java:20857)
        at android.view.ViewGroup.layout(ViewGroup.java:6401)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:20857)
        at android.view.ViewGroup.layout(ViewGroup.java:6401)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
        at android.view.View.layout(View.java:20857)
        at android.view.ViewGroup.layout(ViewGroup.java:6401)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:20857)
        at android.view.ViewGroup.layout(ViewGroup.java:6401)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
2020-06-19 16:42:32.011 14112-14112/com.example.myapplication E/AndroidRuntime:     at android.view.View.layout(View.java:20857)
        at android.view.ViewGroup.layout(ViewGroup.java:6401)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at com.android.internal.policy.DecorView.onLayout(DecorView.java:945)
        at android.view.View.layout(View.java:20857)
        at android.view.ViewGroup.layout(ViewGroup.java:6401)
        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2956)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2643)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1780)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7827)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
        at android.view.Choreographer.doCallbacks(Choreographer.java:723)
        at android.view.Choreographer.doFrame(Choreographer.java:658)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6944)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
2020-06-19 16:42:33.724 3648-3669/? E/PhoneWindow_APM :: isCalledPackage return false
2020-06-19 16:42:33.747 15061-15061/? E/Zygote: isWhitelistProcess - Process is Whitelisted
2020-06-19 16:42:33.748 15061-15061/? E/libpersona: scanKnoxPersonas
2020-06-19 16:42:33.748 15061-15061/? E/libpersona: Couldn't open the File - /data/system/users/0/personalist.xml - No such file or directory
2020-06-19 16:42:35.710 5317-5497/? E/ContactsProvider_EventLog: Flush buffer to file cnt : 1 size : 1Kb duration : 3ms lastUpdatedAfter : 60117 ms mFlush_time_threasold : 2000 mCurrentSize : 514
2020-06-19 16:42:36.063 4997-4997/? E/KTCM: ServiceKTCMWiFiScan:7259::oemAPI.getInternetCheckOption :: networkID = 11, checkNoDNS= 0
2020-06-19 16:42:39.749 4997-4997/? E/OEMExtension: getGWSScanResultsEx()
2020-06-19 16:42:39.770 4997-4997/? E/OEMExtension: getGWSScanResultsEx()
2020-06-19 16:42:39.782 4997-15081/? E/OEMExtension: getGWSScanResultsEx()
2020-06-19 16:42:39.885 4997-4997/? E/KTCM: ServiceKTCMWiFiScan$1:2048::bestScanResult.size = 0
2020-06-19 16:42:48.753 3648-3667/? E/memtrack: Couldn't load memtrack module
2020-06-19 16:42:56.712 3648-4189/? E/Watchdog: !@Sync 808 [2020-06-19 16:42:56.712]
2020-06-19 16:43:00.043 3648-3667/? E/memtrack: Couldn't load memtrack module
...