0

我有一个 ListView 项目/单元格,它有几个层、相对层、线性布局等。我尝试在按钮的 onClick 内执行 v.getParent() ,但它只是向上一层。如何在 onClick 事件处理程序中获取对当前元素根的引用?

这是我的 getView()

             Button v = (Button)findViewById(R.id.myButton);

             v.setOnClickListener(new OnClickListener(){
                     onClick(View v) {

                        //Right here I want to find another view inside the cell.
                        View otherView = ???.findViewById(R.id.myOtherViewInListItem); 
                             otherView.setBackgroundColor(...);
                        .........................................
                     } 
              });
4

2 回答 2

0

我想象这个按钮在 ListView 元素内。基于这个假设:

  1. 只创建一个 OnClickListener。你这样做的方式是在创建adapter.getCount()OnClick 侦听器并疯狂地浪费内存。

  2. 也许您想完全删除按钮并使用 OnItemClick 跟踪整个 ListView 元素的点击,这会将整个 View 的引用传递给您。

  3. 如果您确实必须拥有该按钮,请在 getView 中存储对父级的引用,如下所示:

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // do whatever you're doing to get the view, let's call it v
        Button b = (Button)v.findViewById(/* your button id */ )
        b.setTag(v)
    }
    

然后在您的点击监听器上,您可以:

    onClic(View v){
        View parent = (View)b.getTag();
    }

如果该答案对您有用(我知道确实如此),请像 Daniel Martinus 指出的那样接受它是正确的。

于 2012-12-19T10:27:18.733 回答
0
 Inside onClick(View v)

just call v.getViewParent();  then you will have a view from which you can call the find for   the others.  
于 2012-12-19T10:28:23.797 回答