2012-01-24 11 views
0

ユーザーが行をクリックしたときに、リストビューに再生アイコンを含めたいとします。リストビューのAndroidアイコンセパレータ付きカスタムアダプタ

カスタムアダプタを使用しています(セパレータ付きレイジーロード)...セパレータに問題があり、解決するためにgetViewTypeCount()メソッドを実装したので、他の行と重なっています。今

私は、アイコンは細かい追加けど(セパレータを除く)他の行との重複取得されたリストビューのonItemClickListener上の再生アイコンを含めています...

HERESに私のコード:

OnItemCLickListener :

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.imageViewPlay); 
       icon.setImageBitmap(null); 
       icon.setVisibility(ImageView.GONE); 
       icon.invalidate(); 
      } 


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


       Intent intent = new Intent(StationList2.this, 
         ServiceLauncher.class); 

       intent.putExtra("objectPassed", feeds.get(arg2)); 

       startActivity(intent); 
      } 

    }); 

マイカスタムアダプタ:

private class MyCustomAdapter extends BaseAdapter { 

    private static final int TYPE_ITEM = 0; 
    private static final int TYPE_SEPARATOR = 1; 
    private static final int TYPE_MAX_COUNT = TYPE_SEPARATOR + 1; 

    private ArrayList<BeanChannelList> mData = new ArrayList<BeanChannelList>(); 
    private LayoutInflater mInflater; 

    private TreeSet<Integer> mSeparatorsSet = new TreeSet<Integer>(); 

    public MyCustomAdapter() { 
     mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

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

    public void addItem(final BeanChannelList beanChannelList) { 
     mData.add(beanChannelList); 
     notifyDataSetChanged(); 
    } 

    public void addSeparatorItem(final BeanChannelList beanChannelList) { 
     mData.add(beanChannelList); 
     // save separator position 
     mSeparatorsSet.add(mData.size() - 1); 
     notifyDataSetChanged(); 
    } 

    @Override 
    public int getItemViewType(int position) { 
     return mSeparatorsSet.contains(position) ? TYPE_SEPARATOR 
       : TYPE_ITEM; 
    } 

    @Override 
    public int getViewTypeCount() { 
     return TYPE_MAX_COUNT; 
    } 

    @Override 
    public int getCount() { 
     return mData.size(); 
    } 

    @Override 
    public String getItem(int position) { 
     return mData.get(position).getStrTitle(); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     int type = getItemViewType(position); 

     if (convertView == null) { 
      holder = new ViewHolder(); 
      switch (type) { 
      case TYPE_ITEM: 
       convertView = mInflater 
         .inflate(R.layout.listitem_row, null); 
       holder.textView = (TextView) convertView 
         .findViewById(R.id.textView1); 
       holder.textview2 = (TextView) convertView 
         .findViewById(R.id.textView2); 
       holder.image = (ImageView) convertView 
         .findViewById(R.id.imageView1); 

       holder.imagePlay = (ImageView) convertView 
         .findViewById(R.id.imageViewPlay); 




       break; 
      case TYPE_SEPARATOR: 
       convertView = mInflater.inflate(R.layout.item2, null); 
       holder.textView = (TextView) convertView 
         .findViewById(R.id.textView1); 
       holder.textview2 = (TextView) convertView 
         .findViewById(R.id.textView2); 
       holder.image = (ImageView) convertView 
         .findViewById(R.id.imageView1); 

       holder.imagePlay = (ImageView) convertView 
         .findViewById(R.id.imageViewPlay); 

       convertView.setClickable(false); 
       convertView.setFocusable(false); 
       convertView.setFocusableInTouchMode(false); 
       convertView.setEnabled(false); 

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

     try { 



      if (mData.get(position).getStrChannelNo().equals("")) { 

       holder.textView.setText(mData.get(position) 
         .getStrChannelNo() 
         + " " 
         + mData.get(position).getStrTitle()); 

      } 

      else { 

       holder.textView.setText(mData.get(position) 
         .getStrChannelNo() 
         + ": " 
         + mData.get(position).getStrTitle()); 
      } 



      if (selectedItem == position) { 


       holder.imagePlay.setImageResource(R.drawable.play_small); 
       holder.imagePlay.setVisibility(ImageView.VISIBLE); 


      } 

      holder.textview2.setText(mData.get(position).getStrLocation()); 

      imageLoader.DisplayImage(mData.get(position).getStrImage() 
        .toString(), activity, holder.image); 




     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return convertView; 
    } 

} 

答えて

-1

ViewHolderに問題があると思います。かつて私は同じ種類の問題を抱えていました。 View Holderを使用しないでください。

+0

ohh。それはありますか?... –

+0

があること...この簡単な方法は、パブリックビューgetViewメソッド(int型の位置、表示convertView、のViewGroupの親) \t \t { \t \t \tを試してみてください可能性がある場合(convertView == null)の \t \t \t { \t \t \t \t Log.v(TAG、 "View is null"); \t \t \t \t convertView = getLayoutInflater()。inflate(layoutResource、null); \t \t \t} \t \t \t \t \t \t Log.v(TAGは、 "Viewがnullでありません")。 \t \t \t \t TextView tv =(TextView)convertView.findViewById(android.R.id.text1); \t \t \t \t \t \t tv.setText(items.get(position)); \t \t \t \t \t \tリターンconvertView。 \t \t} –

関連する問題