2016-02-08 35 views
-1

我有一个自定义的适配器类,它扩展了基础适配器。我试图在视图项目上实现onTouchListener。但它不起作用。请帮忙。onTouchListener不能使用自定义视图

这里是代码段

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    View cellView=convertView; 
    ViewHolder viewHolder; 

    if(cellView==null) { 

     LayoutInflater layoutInflater = (LayoutInflater) context. 
       getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     cellView = layoutInflater.inflate(R.layout.grid_topics, parent, false); 
     viewHolder = new ViewHolder(); 
     viewHolder.icon = (ImageView) cellView.findViewById(R.id.cellImageView); 
     viewHolder.text = (TextView) cellView.findViewById(R.id.cellTextView); 
     cellView.setTag(viewHolder); 

    } else { 
     viewHolder = (ViewHolder) cellView.getTag(); 
    } 

    viewHolder.icon.setImageBitmap(list.get(position).image); 
    viewHolder.text.setText(list.get(position).text); 

    cellView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 

      if (event.getAction() == MotionEvent.ACTION_UP) { 
       Toast.makeText(context, list.get(position).text, Toast.LENGTH_SHORT).show(); 
       return true; 
      } 

      return false; 
     } 
    }); 
    return cellView; 
} 

回答

0

尝试BaseAdapter打交道时采用这种做法。看看我是如何在if语句中实现那里的onTouch监听器的。这应该工作。

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

    LayoutInflater mInflater = (LayoutInflater) 
     context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.list_item, null); 
     holder = new ViewHolder(); 
     holder.txtDesc = (TextView) convertView.findViewById(R.id.desc); 
     holder.txtTitle = (TextView) convertView.findViewById(R.id.title); 
     holder.imageView = (ImageView) convertView.findViewById(R.id.icon); 
     convertView.setTag(holder); 
     convertView.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     if (event.getAction() == MotionEvent.ACTION_UP) { 
      Toast.makeText(context, list.get(position).text, Toast.LENGTH_SHORT).show(); 
      return true; 
     } 

     return false; 
    } 
}); 
    } 
    else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    RowItem rowItem = (RowItem) getItem(position); 

    holder.txtDesc.setText(rowItem.getDesc()); 
    holder.txtTitle.setText(rowItem.getTitle()); 
    holder.imageView.setImageResource(rowItem.getImageId()); 

    return convertView; 
} 
+0

不,它仍然没有工作。你的代码与我的代码有什么不同? –