Android 如何从子视图获取祖先视图?

Android how to get an ancestor view from a child view?

我有一个带有自定义数组适配器的 Foo 类型的列表。我希望能够单击数组适配器中其中一个视图中的子元素,然后取回我单击的 Foo.

类型的视图

这是我点击子元素的方式:

// fill array with a test set of objects
final ArrayList<Foo> locations = Foo.getTestingList();

final myCustomArrayAdapter adapter = new myCustomArrayAdapter(rootView.getContext(), myarrayList);
         adapter.setDefaultRequestBtnClickListener(new View.OnClickListener(){
             @Override
             public void onClick(View v){
                    //if child element is clicked
                    if(v.getId() == R.id.deleteBTN){
                        //tag is set to the position in my custom adapter
                        int pos = (Integer)v.getTag();

                       //Get this child's parent view (type foo)


                    }

             }
         });

我希望能够在我刚刚单击的子视图的 Foo 父级上使用某些 Foo 方法。

如果您想获取视图的直接父视图,可以调用方法 getParent() and it will return immediate parent of the target view. Note, this method doesn't directly return a view but instead a ViewParent. ViewParent does not technically need to be a View but all views capable of holding child views i.e. a "view parent" in the Android SDK are of type ViewGroup,该方法本身实现了 ViewParent。所以实际上所有的 ViewParents 都是一个 ViewGroup,它本身就是一个 View。

此外,如果您想访问直接父视图之外的祖先视图,您可以递归调用 getParent() 并对 return 父视图执行检查以确定它们是否是所需视图。