Skip to content

Commit 8310d30

Browse files
author
linjiang
committed
🐛 In the view hierarchy, id is not unique, such as the items of listView.
1 parent c294c14 commit 8310d30

File tree

4 files changed

+24
-26
lines changed

4 files changed

+24
-26
lines changed

pandora-core/src/main/java/tech/linjiang/pandora/inspector/treenode/TreeView.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import android.graphics.Rect;
1111
import android.graphics.RectF;
1212
import android.support.annotation.Nullable;
13-
import android.util.Log;
1413
import android.view.GestureDetector;
1514
import android.view.MotionEvent;
1615
import android.view.ScaleGestureDetector;
@@ -276,7 +275,6 @@ public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float ve
276275
};
277276

278277
private void cancelAllAnim() {
279-
Log.d(TAG, "cancelAllAnim: ");
280278
scroller.abortAnimation();
281279
}
282280

pandora-core/src/main/java/tech/linjiang/pandora/ui/fragment/ViewAttrFragment.java

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,20 +39,13 @@ public class ViewAttrFragment extends BaseListFragment {
3939
@Override
4040
public void onCreate(@Nullable Bundle savedInstanceState) {
4141
super.onCreate(savedInstanceState);
42-
int id = getArguments().getInt(PARAM1, View.NO_ID);
43-
if (id == View.NO_ID) {
44-
throw new IllegalArgumentException("nee provide a valid id");
45-
}
4642
if (Pandora.get().getViewRoot() != null) {
47-
targetView = Pandora.get().getViewRoot().findViewById(id);
43+
targetView = findViewByDefaultTag(Pandora.get().getViewRoot());
4844
if (targetView == null) {
4945
onBackPressed();
5046
} else {
51-
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
52-
if (targetView.getId() == R.id.pd_view_default_id) {
53-
targetView.setId(View.NO_ID);
54-
}
55-
}
47+
// clear flag
48+
targetView.setTag(R.id.pd_view_tag_for_unique, null);
5649
}
5750
} else {
5851
onBackPressed();
@@ -85,6 +78,22 @@ public void onItemClick(int position, BaseItem item) {
8578
loadData();
8679
}
8780

81+
private View findViewByDefaultTag(View root) {
82+
if (root.getTag(R.id.pd_view_tag_for_unique) != null) {
83+
return root;
84+
}
85+
if (root instanceof ViewGroup) {
86+
ViewGroup parent = (ViewGroup) root;
87+
for (int i = 0; i < parent.getChildCount(); i++) {
88+
View view = findViewByDefaultTag(parent.getChildAt(i));
89+
if (view != null) {
90+
return view;
91+
}
92+
}
93+
}
94+
return null;
95+
}
96+
8897
private void loadData() {
8998
showLoading();
9099
new SimpleTask<>(new SimpleTask.Callback<Void, List<BaseItem>>() {

pandora-core/src/main/java/tech/linjiang/pandora/ui/fragment/ViewFragment.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -69,17 +69,8 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
6969

7070
@Override
7171
public void onClick(View v) {
72-
int id = v.getId();
73-
if (id == View.NO_ID) {
74-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
75-
id = View.generateViewId();
76-
} else {
77-
id = R.id.pd_view_default_id;
78-
}
79-
v.setId(id);
80-
}
81-
Bundle bundle = new Bundle();
82-
bundle.putInt(PARAM1, id);
83-
launch(ViewAttrFragment.class, bundle);
72+
// add flag
73+
v.setTag(R.id.pd_view_tag_for_unique, new Object());
74+
launch(ViewAttrFragment.class, null);
8475
}
8576
}

pandora-core/src/main/res/values/ids.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66
<item name="pd_recycler_adapter_id" type="id"/>
77
<!--toolbar-->
88
<item name="pd_toolbar_id" type="id"/>
9-
<!--The view needs to be specified when it is passed between fragments in case of NO_ID-->
10-
<item name="pd_view_default_id" type="id"/>
9+
<!--To identify the uniqueness of view temporarily when launching to other fragments-->
10+
<item name="pd_view_tag_for_unique" type="id"/>
1111
</resources>

0 commit comments

Comments
 (0)