2016-11-30 81 views
0

我在列表视图中具有线性布局,并且需要在选择线性布局时更改线性布局内的某些项目的可见性。由于设计,Listview不知道线性布局是什么,因此不能明确引用此布局中的任何项目。在这种情况下,触发线性布局中可见性变化的最佳解决方案是什么?如何在列表视图中更改线性布局的项目可见性

listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(
        final AdapterView<?> adapterView, 
        final View view, 
        final int position, 
        final long id) { 
         //the View is a linearlayout 
         //will need to trigger its items visibility 
        } 
       } 

谢谢!

回答

1

那么,一个可能的解决方案是调用所选择的视图的方法,这将做你想做的。考虑到您使用的是自定义视图,它看起来就像这样:

list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     MyCustomView entry = (MyCustomView) parent.getAdapter().getItem(position); 

     // Now you call some method that changes the visibility of whatever you want 
     entry.doSomeStuff(); 
    } 
}); 

PS:在这个例子中,我使用了自定义视图,但当然也可以是你的LinearLayout,如果这就是你只有,虽然使用自定义类更适合更好的封装。

+0

是的,棘手的部分是我不能在这里输入MyCustomView的条目,因为它对调用者是隐藏的。 –

+0

@GreenHo隐藏如何?你的意思是,从这一点来看,这个班级是不可访问的?你想改变一些第三方库的行为吗? –

+0

对,隐藏我的意思是,由于封装,listview不知道/关心自定义视图。自定义视图存在于另一个包中。 –

相关问题