Android listView - 项目点击时关闭已打开的项目

时间:2014-01-26 11:09:58

标签: android listview android-listview onitemclicklistener

我想将listview的打开项限制为一个。 单击另一个项目时,如何关闭上一个打开的项目?

例如: 单击项目#1 - 项目#1打开。
单击项目#2 - 项目#1关闭。项目#2打开。

我尝试用最后一个位置手动调用onItemClick函数,但它太复杂了。

这是我的onitemclick功能:

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        animSlideDown = AnimationUtils.loadAnimation(getApplicationContext(),
                R.anim.slide_down);
        RelativeLayout wrapper = (RelativeLayout) view;
        final RelativeLayout itemClosed = (RelativeLayout) wrapper.getChildAt(1);
        final RelativeLayout fullItem = (RelativeLayout) wrapper.getChildAt(0);
        boolean isOpen = itemClosed.getVisibility() == View.GONE;


        if (!isOpen) {
            fullItem.setVisibility(View.VISIBLE);
            fullItem.startAnimation(animSlideDown);
            itemClosed.setVisibility(View.GONE);
        } else {
            itemClosed.setVisibility(View.VISIBLE);
            fullItem.setVisibility(View.GONE);
        } 
    }

由于

2 个答案:

答案 0 :(得分:0)

为此目的使用可扩展列表视图。要实现您的逻辑,最好的选择是可扩展列表视图。

答案 1 :(得分:0)

回答我自己的问题 - 它实际上非常简单,我所要做的只是通过“父”的每个孩子并隐藏它,如果它不是当前视图。希望有一天能帮助别人..

    @Override
public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
    RelativeLayout wrapper = (RelativeLayout) view;
    final RelativeLayout itemClosed = (RelativeLayout) wrapper.getChildAt(1);
    final RelativeLayout fullItem = (RelativeLayout) wrapper.getChildAt(0);
    boolean isOpen = itemClosed.getVisibility() == View.GONE;

    if (!isOpen) {
        fullItem.setVisibility(View.VISIBLE);
        itemClosed.setVisibility(View.GONE);

        for (int i = 0; i < parent.getChildCount(); i++) {
            RelativeLayout v = (RelativeLayout) parent.getChildAt(i);
            if (v != view && v.getChildAt(0).getVisibility() == View.VISIBLE) {
                v.getChildAt(0).setVisibility(View.GONE);
                v.getChildAt(1).setVisibility(View.VISIBLE);
            }
        }

    } else {
        itemClosed.setVisibility(View.VISIBLE);
        fullItem.setVisibility(View.GONE);
    }
}