我已经制作了一个列表视图。 列表视图正常工作。 但是视图列表项是一个xml文件。 其中包含一个imagView和一个图层。 我希望当用户点击要显示的图层ImagView时。 问题是,当用户点击ImagView时 显示项目图层3和13(两次)。 我不知道问题是什么? 有人帮忙吗?
custom_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImagView
android:id="@+id/imagView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#0f0" />
<LinearLayout
android:id="@+id/linear"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#00f" />
</LinearLayout>
的.java
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder Holder;
if (convertView == null) {
Holder = new ViewHolder();
convertView = myInflater.inflate(R.layout.cystom_item, null);
Holder.my_image= (ImageView) convertView.findViewById(R.id.imagView);
Holder.linear = (LinearLayout) convertView.findViewById(R.id.linear2);
} else
Holder = (ViewHolder) convertView.getTag();
Holder.my_image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if (lastView == Holder.linear);
else {
if (lastView != null)
lastView.setVisibility(View.GONE);
Holder.linear.startAnimation(anim);
Holder.linear.setVisibility(View.VISIBLE);
lastView = Holder.linear;
}
}
});
return convertView;
}
@Override
public Filter getFilter() {
// TODO Auto-generated method stub
return null;
}
public class ViewHolder
{
ImageView my_image;
LinearLayout linear;
}
答案 0 :(得分:0)
您多次连接onClickListener:
Holder.linear1.setOnClickListener(new OnClickListener()...
仅当clickListener是新的Holder而不是循环的Holder时才设置它。
你应该注意到你没有花括号:
else
Holder = (ViewHolder) convertView.getTag();
所以此行之后的所有内容都在执行。
试试这个:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder Holder;
if (convertView == null) {
Holder = new ViewHolder();
convertView = myInflater.inflate(R.layout.cystom_item, null);
Holder.my_image= (ImageView) convertView.findViewById(R.id.imagView);
Holder.linear = (LinearLayout) convertView.findViewById(R.id.linear2);
} else
{
Holder = (ViewHolder) convertView.getTag();
Holder.my_image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if (lastView == Holder.linear);
else {
if (lastView != null)
lastView.setVisibility(View.GONE);
Holder.linear.startAnimation(anim);
Holder.linear.setVisibility(View.VISIBLE);
lastView = Holder.linear;
}
}
});
}
return convertView;
}
答案 1 :(得分:0)
实际上,我认为您已经在代码中两次放置了以下if语句,第一次是使用if语句完成的,第二次是在else语句中进行了初始化。我认为这导致listitem视图加倍。
if (lastView == Holder.linear);
您应该尝试以下操作:
{
if (lastView != null)
lastView.setVisibility(View.GONE);
else {
Holder.linear.startAnimation(anim);
Holder.linear.setVisibility(View.VISIBLE);
lastView = Holder.linear;
}
}
代替此:
{
if (lastView == Holder.linear);
else {
if (lastView != null)
lastView.setVisibility(View.GONE);
Holder.linear.startAnimation(anim);
Holder.linear.setVisibility(View.VISIBLE);
lastView = Holder.linear;
}
}