gpt4 book ai didi

java - 从 LinearLayout 中删除一个 View 或一系列 View 会导致调用 unFocus 时出现 NullPointerException

转载 作者:太空宇宙 更新时间:2023-11-04 11:46:13 28 4
gpt4 key购买 nike

我有一个包含 LinearLayout 的 Horizo​​ntalScrollView,用于显示文件树功能区

 <HorizontalScrollView
android:id="@+id/content_ribbon_scrollview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:scrollbars="none">

<LinearLayout
android:id="@+id/content_file_ribbon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">

</LinearLayout>

</HorizontalScrollView>

当用户导航到项目时,项目会添加到 LinearLayout

void addRibbonItem(final Node node) {
final TextView view = (TextView) getLayoutInflater().inflate(R.layout.shard_ribbon_item, mRibbon, false);
view.setText(node.getName());

mRibbon.addView(view);
mRibbon.postDelayed(() -> mRibonScrollView.fullScroll(View.FOCUS_RIGHT), 17);

单击某个项目时,应删除该项目右侧的所有项目。

我尝试使用removeViewsInLayout方法来做到这一点,并反复删除最终 View 。

(忽略缺少边界检查)

    view.setOnClickListener(v -> {
mRibbon.removeViewsInLayout(mRibbon.indexOfChild(view) + 1, mRibbon.getChildCount());
});


view.setOnClickListener((v) -> {
final int index = mRibbon.indexOfChild(view);
for(int i = 0; i < index; i++) mRibbon.removeViewAt(mRibbon.getChildCount());
});

这两种方法都会给出相同的异常

 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.unFocus(android.view.View)' on a null object reference
at android.view.ViewGroup.removeViewsInternal(ViewGroup.java:4691)
at android.view.ViewGroup.removeViewsInLayout(ViewGroup.java:4539)
at com.tpb.projects.repo.content.ContentActivity.lambda$-com_tpb_projects_repo_content_ContentActivity_lambda$1(ContentActivity.java:67)

感谢任何帮助。

编辑:

删除并重新添加 View 确实有效,但我不认为这是一个好的解决方案。

    view.setOnClickListener(v -> {
final ArrayList<View> views = new ArrayList<>();
for(int i = 0; i <= mRibbon.indexOfChild(view); i++) {
views.add(mRibbon.getChildAt(i));
}
mRibbon.removeAllViews();
for(View item : views) {
mRibbon.addView(item);
}

});

最佳答案

试试这个:
1. 使用子元素获取父元素的引用。
2. 将父级转换为 ViewGroup,以便您可以访问并使用 removeView 方法。

((ViewGroup)scrollChildLayout.getParent()).removeView(scrollChildLayout);

而不是这样:

//scrollView.removeView(scrollChildLayout);

关于java - 从 LinearLayout 中删除一个 View 或一系列 View 会导致调用 unFocus 时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42321075/

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