Don't add other's child as header or footer

Previously ListView#addHeaderView and ListView#addFooterView accepts a
view which is other's child.

The CL adds precondition check not to accept other's child and make the
methods consistent with ViewGroup#addView.

Bug: 37726743
Test: CtsWidgetTestCases
Change-Id: Ibe11f162e9af3c153254966796349b94468b08f3
This commit is contained in:
Daichi Hirono
2017-05-01 13:33:49 +09:00
parent ad4c31fecf
commit 358d0d3297

View File

@@ -49,6 +49,7 @@ import android.view.accessibility.AccessibilityNodeProvider;
import android.widget.RemoteViews.RemoteView;
import com.android.internal.R;
import com.android.internal.util.Preconditions;
import com.google.android.collect.Lists;
@@ -335,6 +336,11 @@ public class ListView extends AbsListView {
* @param isSelectable whether the item is selectable
*/
public void addHeaderView(View v, Object data, boolean isSelectable) {
Preconditions.checkState(
v.getParent() == null,
"The specified child already has a parent. "
+ "You must call removeView() on the child's parent first.");
final FixedViewInfo info = new FixedViewInfo();
info.view = v;
info.data = data;
@@ -429,6 +435,11 @@ public class ListView extends AbsListView {
* @param isSelectable true if the footer view can be selected
*/
public void addFooterView(View v, Object data, boolean isSelectable) {
Preconditions.checkState(
v.getParent() == null,
"The specified child already has a parent. "
+ "You must call removeView() on the child's parent first.");
final FixedViewInfo info = new FixedViewInfo();
info.view = v;
info.data = data;