【问题标题】:onclicklistener for subitems of listview列表视图子项的 onclicklistener
【发布时间】:2012-07-24 01:31:46
【问题描述】:

我有一个listview,而 lisview 的每个项目都是一个linearlayout。 每个线性布局包含 3 个文本视图。

如何为这些文本视图设置onclicklistener

我试过这个:

TextView tv=(TextView)findById(R.id.textView1);
tv.setOnClickListener(...);

这给我一个nullpointerexception

我也为列表视图尝试了 setonitemclickedlistener,但这仅允许我对线性布局进行操作,而不是文本视图。

提前致谢。

【问题讨论】:

  • 您在使用适配器吗?如果是这样,您可以编辑您的问题并发布您的 getView() 方法吗?里面有你需要设置你的听众的地方。
  • 我使用提供的 API SimpleAdapter。我没有覆盖任何方法。如果我只是为每个文本视图添加一个侦听器,会不会非常低效?
  • 它比不这样做效率低。但是,如果您需要在列表中的每一行中分别获取所有 3 个的点击事件,那是您唯一的选择(我知道)。此外,我认为这不会导致严重的性能下降或任何事情,如果那是你所得到的。你可以发布你的活动代码吗?我可以尝试帮助您将其更改为使用自定义适配器,该适配器将为您在 TextViews 上设置点击侦听器。

标签: android listview android-listview android-event subitem


【解决方案1】:

如果这是静态需要并且您的视图是基于 XML 的,这就是我所做的:

<TextView
    ...
    android:clickable="true"
    android:onClick="myHandler"
/>

每当触摸/单击文本视图时,这都会调用 myHandler。当您在列表视图中使用它时,您仍然需要在 getView() 中添加一个标签,并在 myHandler() 中使用它来确定按下了哪个行/字段。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    为了得到这个要求,你必须使用自定义适配器类,这样你就可以很容易地得到这个。使用自定义适配器是非常easy and simple 的过程。

    点击这个link,它的简单应用程序,你可以使用TextView代替Buttons

    祝你有美好的一天..

    【讨论】:

      【解决方案3】:

      你应该去创建像 Use BaseAdpter 这样的客户适配器 并在此处传递您的列表并根据位置将该列表设置为 Textview 在这里您也可以设置 onClick 事件 您可以像 ex 一样创建基本适配器 (1)

      public class GridAdpter extends BaseAdapter 
      {
      
      List<String> checkednamelist;
      
      public GridAdpter(Context c, List<String> myitem) {
      
      this.checkednamelist =myitem
      }
      
      @Override
          public View getView(final int position, View convertView, ViewGroup parent) {
              // TODO Auto-generated method stub
      
                  //Here change with yur row xml file name and  3 textview control id name
          View grid;
          if (convertView == null) {
              grid = layoutInflater.inflate(R.layout.row_grid, null);
          } else {
              grid = convertView;
          }
      
          TextView textView2 = (TextView) grid.findViewById(R.id.txtlable2);    
          textView.setText(checkednamelist.get(position);
          textView2.setOnClickListener(new OnClickListener() {
      
              @Override
              public void onClick(View v) {
                  // TODO Auto-generated method stub
                  // do here as per your require
      
              }
          });
      

      }

      @Override
      public int getCount() {
          // TODO Auto-generated method stub
          return myitem.size();
      }
      
      @Override
      public Object getItem(int position) {
          // TODO Auto-generated method stub
          return myitem.get(position);
      }
      
      @Override
      public long getItemId(int position) {
          // TODO Auto-generated method stub
          return position;
      }
      
      public List<String> mycheckeditem() {
          return checkednamelist;
      }
      

      }

      // 最后用你的列表视图设置这个适配器

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多