У меня есть HorizontalScrollView, содержащий LinearLayout, который используется для отображения дерева файлов лентыУдаление зрения или диапазон мнений в LinearLayout вызывает NullPointerException в вызове unFocus
<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.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)
Любая помощь приветствуется.
Edit:
Удаление и повторное добавление просмотров делает работу, но я не считаю, что это хорошее решение.
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);
}
});
Это позволяет мне удалить вид, который щелкнул, но я получаю тот же сбой при попытке удалить диапазон мнений от ViewGroup, что то, что я нужно сделать. –
Как насчет запроса вызоваChildFocus Перед удалением? – motis10
Это также сбой, потому что ViewGroup возвращает null для getFocusedChild(), который требуется для requestChildFocus –