更改自定义适配器上的边距onClick回调无法正常工作,android

时间:2013-07-24 13:29:10

标签: android android-listview

我正在使用自定义适配器显示ListView。在视图中,我在布局中有一个textView和一个按钮。

应该发生什么 - >只要我点击文本视图,onClick的自定义适配器类中的TextView回调就会设置button_layout的边距,如此

View button_layout = (((View)(View)v.getParent()).getParent()).findViewById(R.id.button_layout));
MarginLayoutParams margins=(MarginLayoutParams)button_layout.getLayoutParams();
margins.bottomMargin=-100; 

但这没有发生。我能够改变背景颜色。但无法改变底部保证金。 customadapter是较大代码的一部分,我无法透露。

应用程序没有崩溃,但也无法正常工作。如果我在调试器中看到布局的bottomMargin的值已经改变但它没有反映在UI中:(我已经在这里放了一些代码。假设已经设置了onClickListener。它正在工作,因为正如我所说我可以在单击文本视图时更改布局的背景颜色。

public class MyCustomAdapter extends ArrayAdapter<someClass> implements OnClickListener{
   public View getView(int position, View convertView, ViewGroup parent) {
       }
        public void onClick(View v){
            View row_to_hide = (((View        ((View)v.getParent()).getParent()).findViewById(R.id.row_to_hide));`
            MarginLayoutParams margins=(MarginLayoutParams)row_to_hide.getLayoutParams();`
              margins.bottomMargin=-100;`
                                        }
   }

我是android的新手,想知道这种方法在概念上是否存在错误。此外,textView和按钮分别位于相对布局和线性布局中。

我正在尝试更改按钮所在的线性布局的边距,以便我可以隐藏按钮。

1 个答案:

答案 0 :(得分:1)

您更改了布局参数,但您必须将它们设置回来查看。因此,方法setLayoutParams在那里缺失。代码shold看起来像这样:

View button_layout = (((View)(View)v.getParent()).getParent()).findViewById(R.id.button_layout));
MarginLayoutParams margins=(MarginLayoutParams)button_layout.getLayoutParams();
margins.bottomMargin=-100; 
button_layout.setLayoutParams(margins);

旁注:您应该使用((View)(View)v.getParent()).getParent())方法中的convertView参数替换getView