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

Android如何从子视图获取祖先视图?,android,onclick,android-arrayadapter,onclicklistener,Android,Onclick,Android Arrayadapter,Onclicklistener,我有一个带有自定义数组适配器的Foo类型列表。我希望能够单击阵列适配器中某个视图中的子元素,并返回我单击的类型为Foo的视图 这是我单击子元素的方式: // fill array with a test set of objects final ArrayList<Foo> locations = Foo.getTestingList(); final myCustomArrayAdapter adapter = new myCustomArrayAdapter(rootView.

我有一个带有自定义数组适配器的
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)


                    }

             }
         });
//用对象的测试集填充数组
final ArrayList locations=Foo.getTestingList();
最终myCustomArrayAdapter=新的myCustomArrayAdapter(rootView.getContext(),myarrayList);
setDefaultRequestBtnClickListener(新视图.OnClickListener()){
@凌驾
公共void onClick(视图v){
//如果单击了子元素
if(v.getId()==R.id.deleteBTN){
//标记设置为自定义适配器中的位置
int pos=(整数)v.getTag();
//获取此子级的父视图(键入foo)
}
}
});

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

如果您想获得视图的直接父视图,可以调用该方法,它将返回目标视图的直接父视图。注意,此方法不直接返回视图,而是返回一个。ViewParent在技术上不需要是视图,但所有能够容纳子视图(即Android SDK中的“视图父视图”)的视图都属于本身实现ViewParent的类型。因此,实际上所有ViewParents都是一个ViewGroup,它本身就是一个视图


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

您还不完全清楚需要什么。您单击的视图作为onClick(view)回调的单参数提供给您。如果您有自定义视图,则可能需要将其强制转换为适当的类型;如果它是一个视图组,并且它首先代表其子视图拦截触摸事件,则可能需要迭代其子视图。@WadeWilson onClick(视图)中的视图是一个子元素(按钮)在我的Foo视图中,因为我单击了自定义视图Foo中的特定按钮。我不确定如何获取其父/容器,该容器的类型为FooThere在View类上有一个名为getParent()的方法,返回类型为ViewParent,但您可以将返回值强制转换为“Foo”类型。(为了安全起见,请将其包装在instanceof check中)@WadeWilson但getParent()将提供最外层的容器,在我的情况下,它不是Foo。Foo位于最外层的容器中,在我的例子中,这是一个约束视图。我想我的一般问题是如何获得任何父母/祖父母/曾祖父母。。。从线内的任何子视图中执行等操作。