2015-10-16 65 views
0

我做了一個列表視圖。 列表視圖正常工作。 但是視圖列表項是一個xml文件。 其中包含一個imagView和一個圖層。 我想要當用戶點擊ImagView,要顯示的圖層。 問題是,當用戶單擊ImagView是 項目層3和13時,顯示(兩次)。 我不知道有什麼問題? 有人幫忙?SetVisibility當使用自定義ListView

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

我更新了我的問題 查找了 – madam

回答

0

連線的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; 
} 
+0

我更新了我的問題查找 – madam

+0

問題仍然是一樣的 –

+0

這一行是Holder.my_image.setOnClickListener(新的OnClickListener()正在執行天氣它是一個新的視圖或一個可回收的視圖 –