2011-05-12 40 views
8

我有三个textview使用自定义适配器的列表视图中的一行,并单击该行时,我想执行所选文本视图的单击事件。在listview的setOnItemClickListener上设置项目单击事件Android

下面是我点击事件的示例代码。在第一次点击时,听众被设置,只有第二次点击才会发生实际的点击事件,我想在第一次点击时发现它。可能吗?

listView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapter, View view,  int pos, long id) { 

        final Order orderBooking = (Order)adapter.getItemAtPosition(pos); 

        // SKU listener 
        final TextView tvSkuId = (TextView) view.findViewById(orderBooking.getSelectedSkuId()); 
        tvSkuId.setOnClickListener(new OnClickListener() { 
         @Override 
         public void onClick(View view) { 
          onSkuClickListener(view, orderBooking); 
         } 
        }); 

        // SO listener 
        final TextView tvSoId = (TextView) view.findViewById(orderBooking.getSelectedSoId()); 
        tvSoId.setOnClickListener(new OnClickListener() { 
         @Override 
         public void onClick(View view) { 
          onSoClickListener(view, orderBooking); 
         } 
        }); 

        // OR listener 
        final TextView txtOrId = (TextView) view.findViewById(orderBooking.getSelectedOrId()); 
        //onOrClickListener(view, orderBooking); 
        txtOrId.setOnClickListener(new OnClickListener() { 
         @Override 
         public void onClick(View view) { 
          onOrClickListener(view, orderBooking); 
         } 
        }); 
      } 
     }); 

回答

6

为什么不在初始化时设置这些clickListeners?当您将数据绑定到视图时,您应该在适配器中制作它。你的代码是错误的,因为它会在用户每次点击列表的行时初始化你的视图。

+1

是的,你是对的,我这样做,因为我创建我的适配器在一个单独的类,并且无法更新活动视图,现在我添加适配器作为子类,它如果我将侦听器设置在适配器本身中,则完美工作。非常感谢。 – Swarna 2011-05-12 10:24:54

+0

不客气,很高兴我的回答对你有帮助。 – Egor 2011-05-12 11:12:39

0

在getview方法中的adapater中执行此操作。为每个文本视图设置一个onclick列表器。

@Override 
public View getChildView(int groupPosition, int childPosition, 
     boolean isLastChild, View convertView, ViewGroup parent) { 

    List<SectionObj> article = (List<SectionObj>) children.get(groupPosition); 

    if (convertView == null) { 
     LayoutInflater infalInflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.listchildlayout_galleryview, null); 
    }  
    Gallery gallery = (Gallery) convertView.findViewById(R.id.customviewgallery); 
    gallery.setAdapter(new AddImgAdp(context, article, groupPosition)); 
    gallery.setOnItemClickListener(mOnGalleryClick); 

    return convertView; 
} 

private OnItemClickListener mOnGalleryClick = new OnItemClickListener(){ 

    @Override 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 


    }  
}; 

以上是图库视图。做同样的事情,除了做它的文本视图

+0

嗨哈迪斯你是正确的..如果我们写listview.setOnItemClickListener中的textview clicklistener第一个列表项获得可点击后TextView ..如果我们写在适配器..直接到perticular Textview ..谢谢。 – SBK 2011-05-12 10:15:04

+0

我把它添加到getView方法中,现在它工作的很好,现在我将适配器添加为子类。 – Swarna 2011-05-12 10:27:25

+0

@Swarna加入适配器作为子类什么?如果需要刷新活动或片段列表视图,则可以在基本适配器 上调用notifyDataSetChanged()方法,通知附属的观察者基础数据已更改,并且任何反映数据集的视图都应刷新自己。 – Arvis 2014-02-10 12:34:46

相关问题