在ListView中捕获TextView单击

时间:2012-08-20 14:18:16

标签: android listview onclick textview linkify

我有一个包含4个TextView的自定义ListView。现在,TextViews必须是可链接的。由于Linkify在ListView中不起作用,我创建了一个callIntent函数来查看链接是否可点击。但如果没有可点击的链接,我想开始一个新的活动。我使用以下代码:

           lvMembersList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {

          final TextView txtLine1 = (TextView) arg1.findViewById(R.id.tv_member_details_line1);
          final TextView txtLine2 = (TextView) arg1.findViewById(R.id.tv_member_details_line2);
          final TextView txtLine3 = (TextView) arg1.findViewById(R.id.tv_member_details_line3);
          final TextView txtLine4 = (TextView) arg1.findViewById(R.id.tv_member_details_line4);

         txtLine1.setOnClickListener(new OnClickListener() {
                              public void onClick(View v) {
                                     callIntent(1);
                              }
                       });

         txtLine2.setOnClickListener(new OnClickListener() {
                              public void onClick(View v) {
                                     callIntent(2);
                              }
                       });

         txtLine3.setOnClickListener(new OnClickListener() {
                              public void onClick(View v) {
                                     callIntent(3);
                              }
                       });

         txtLine4.setOnClickListener(new OnClickListener() {
                              public void onClick(View v) {
                                     callIntent(4);
                              }
                       });

}}

现在,当我第一次点击某个项目时,TextView监听器就会被设置。单个点击仅在第二次之后有效。在这种情况下我该怎么办?

2 个答案:

答案 0 :(得分:2)

将此代码放在适配器的getView()方法中。在您的代码中,当您单击列表视图的一行时,将调用onItemClick

答案 1 :(得分:0)

为每个文本视图添加以下属性(布局中将用作自定义列表项的四个文本视图)

android:onClick="onTextView1_click"

- 您必须对所有4个文本视图执行此操作以单独跟踪点击事件 -


然后在代码中添加以下方法以在单击textview1

时触发
public void onTextView1_click(View view)
{
    final int position = (Integer) view.getTag();
//implementation (Which needs to be done when someone click textview1)
}

最重要的是,你必须在适配器类的getViewMethod中添加位置作为标记。这将有助于跟踪列表视图中单击的项目

holder.textView1.setTag(position);

你可以像我在“onTextView1_click(查看视图)”方法中指出的那样访问这个值“位置变量”


在列表视图中---&gt;

android:focusable="false"

在初始化列表视图后不久,在代码中添加“setItemsCanFocus(true)”。这表示可聚焦项目包含在列表视图中的每个项目中。

lvMembersList = (ListView) findViewById(R.id.NameOfListTView);
lvMembersList.setItemsCanFocus(true);                            // <---------[X]