我做了一个列表视图。列表视图工作正常。但是视图列表项是一个xml文件。它包含一个imagView和一个层。我希望当用户单击ImagView时,要显示的层。问题是,当用户单击ImagView was Items layers 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;
}发布于 2015-10-16 22:14:48
您需要多次连接onClickListener:
Holder.linear1.setOnClickListener(new OnClickListener()...仅当clickListener是新的支架而不是回收的支架时才设置它。
您应该注意到这里没有大括号:
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;
 }发布于 2018-06-24 23:16:01
实际上,我认为您已经在代码中放置了下面的if语句两次,第一次是使用if语句,第二次是在else语句中进行初始化。我认为这导致了列表视图的翻倍。
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;
                }
            }
https://stackoverflow.com/questions/33172604
复制相似问题