2012-02-01 6 views
0

私はリストビューアイテムをクリックすると、音楽プレーヤーのように再生アイコンをsetVisibleしようとしています。Android ListViewとカスタムアレイアダプターの画像の再合成

カスタムアレイアダプターを使用していますが、すべて正常ですが、上下にスクロールしてリスト上の項目を選択すると、前の再生アイコンが消えます。

しかし、スクロールせずに項目をクリックするだけで完璧に動作します。

OnclickListener:

listChannels.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      // TODO Auto-generated method stub 


      if (oldView != null) { 
       oldView.setDrawingCacheEnabled(true); 
       ImageView icon = (ImageView) oldView 
         .findViewById(R.id.icon); 
       icon.setImageBitmap(null); 
       icon.setVisibility(ImageView.GONE); 
       icon.invalidate(); 
      } 

      oldView = arg1; 
      selectedItem = arg2; 
      ImageView icon = (ImageView) arg1.findViewById(R.id.icon); 
      icon.setImageResource(R.drawable.play); 
      icon.setVisibility(ImageView.VISIBLE); 

     } 
    }); 

Arrayアダプタ:

private class ListArrayAdapter extends ArrayAdapter<String> { 
    public ListArrayAdapter(Context context, int textViewResourceId, 
      String[] arrTitle) { 
     super(context, textViewResourceId, arrTitle); 

     imageLoader = new ImageLoader(activity.getApplicationContext()); 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = getLayoutInflater(); 
     View row = inflater.inflate(R.layout.listitem_row, parent, false); 
     TextView label = (TextView) row.findViewById(R.id.station); 


     ImageView imageView = (ImageView) row 
       .findViewById(R.id.imageViewDisplay); 


      String areaStr = feeds.get(position).getStrLocation(); 

      imageLoader.DisplayImage(feeds.get(position).getStrImage() 
        .toString(), activity, imageView); 

      if (!areaStr.equals("")) { 
       TextView area = (TextView) row.findViewById(R.id.area); 
       area.setText(areaStr); 
       area.setVisibility(TextView.VISIBLE); 
      } 
      if (selectedItem == position) { 
       ImageView icon = (ImageView) row.findViewById(R.id.icon); 
       icon.setImageResource(R.drawable.play); 
       icon.setVisibility(ImageView.VISIBLE); 

      } 

     return row; 
    } 
} 

答えて

1

あなたはこのようなカスタムアダプタクラス持ってshoud:

public class ListArrayAdapter extends ArrayAdapter<String>{ 

    Context context; 
    ArrayList<String> array=new ArrayList<String>(); 
    LayoutInflater mInflater; 
    int selected; 

    public ListArrayAdapter(Context context,int textViewResourceId,ArrayList<String> list) 
    { 
     super(context, textViewResourceId, list); 

     this.context=context; 
     array=list; 
     mInflater = LayoutInflater.from(context); 
      selected=list.size()+1;  
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    {  
     final ViewHolder holder; 

     if(convertView==null) 
     { 
       convertView = mInflater.inflate(R.layout.listitem_row, null); 
       holder = new ViewHolder(); 

       holder.label = (TextView) convertView.findViewById(R.id.station); 
       holder.imageView = (ImageView) convertView.findViewById(R.id.imageViewDisplay);      
       holder.icon = (ImageView) convertView.findViewById(R.id.icon); 
       holder.area = (TextView) row.findViewById(R.id.area); 

       convertView.setTag(holder); 
     } 
     else 
       holder=(ViewHolder)convertView.getTag();   

     // your code goes here 

     convertView.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 

        selected=position; 
            holder.icon.setImageResource(R.drawable.play); 
            holder.icon.setVisibility(View.VISIBLE); 
       } 
     }); 
     if(selected==position) 
     { 
      holder.icon.setImageResource(R.drawable.play); 
      holder.icon.setVisibility(View.VISIBLE); 
     } 
     else 
      holder.icon.setVisibility(View.GONE); 

     return convertView; 
    } 

    static class ViewHolder 
    { 
     TextView label; 
     ImageView imageView; 
     ImageView icon; 
     TextView area; 
    } 
} 

を、あなたのために心配する必要はありません。これはあなたのlistview.onItemClick()で手続きできます。

+1

私の編集した回答を確認してください! – Hiral

+0

Thnxたくさん、すべてのthoその(新しいView.onClickListener(){....:D – ZealDeveloper

関連する問題