Я работаю над приложением в студии 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