我想将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);
}
}
由于
答案 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);
}
}