Android 隐藏/取消隐藏列表项中的布局

Android 隐藏/取消隐藏列表项中的布局,android,layout,view,visibility,Android,Layout,View,Visibility,我有一个列表项的布局,它由两个线性布局组成。我想要实现的是:单击项目时,第二个LinearLayout应变为可见/消失,具体取决于当前的可见性 我正在试验以下代码: getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, Vi

我有一个列表项的布局,它由两个
线性布局组成。我想要实现的是:单击项目时,第二个
LinearLayout
应变为可见/消失,具体取决于当前的可见性

我正在试验以下代码:

    getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            view.getViewById(R.id.id_of_the_second_linear_layout).setVisibility(View.GONE);
        }
    });

每个项目都已经在XML中添加了LinearLayout,如果可能的话,我想切换可见性标志。

您在错误的位置编写逻辑。您希望侦听listitem中视图的单击。在适配器的
getView
方法中编写逻辑。在您的
getView
中,逻辑可以是这样的

ll1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                ll2.setVisibility(View.GONE);

            }
        });

ll2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                ll1.setVisibility(View.GONE);

            }
        });

类似于此。

当您滚动列表项时,某些布局将隐藏和取消隐藏,在这种情况下,如果您一次只针对一个可见的视图(即一次只考虑一个单元格),那么您可以保留单击的项的位置或id,因为您使用的是
光标或适配器。否则,如果您正在考虑多个单元格,请维护一个列表,其中存储已点击的单元格的每个id

将列表或单个位置值传递给adpater,并在getview中比较id或位置,然后执行可见性代码


希望这个提示能有所帮助。

当我将此代码添加到适配器中,并单击一个项目时,有几个项目被更新:public View getView(int position,View convertView,ViewGroup ViewGroup){View v=super.getView(position,convertView,ViewGroup);v.setOnClickListener(new View.OnClickListener(){public void onClick(视图视图){View expandablePanel=View.findViewById(R.id.expandable_panel);toggleVisibility(expandablePanel);;;}});return v;}可以在问题中显示此代码吗?我还看到,您没有在getView()中膨胀任何布局?
ll1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                ll2.setVisibility(View.GONE);

            }
        });

ll2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                ll1.setVisibility(View.GONE);

            }
        });