【问题标题】:Android: Cannot get a clickable ListView header/footerAndroid:无法获得可点击的 ListView 页眉/页脚
【发布时间】:2012-01-11 21:09:32
【问题描述】:

我正在尝试在我的列表视图中设置页眉和页脚,它们是可点击的按钮。问题是 OnClickListener 没有响应任何东西,我不知道我做错了什么。

$   View header = getLayoutInflater().inflate(R.layout.header_layout, null, true);
    getListView().addHeaderView(header);

    myAdapter = new myAdapter(this);

    header.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Do what I want when i click it
        }
    });

更新
我最终想出的最佳解决方案是在标题布局中添加一个单独的按钮,然后这样做:

View header = getLayoutInflater().inflate(R.layout.header_layout, null);
Button headerButton = (Button)header.findViewById(R.id.header_button);
getListView().addHeaderView(header);

headerButton.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
     // My Click Stuff
     }
});

【问题讨论】:

  • 你可能错过了这一行header.setClickable(true)

标签: java android listview header onclick


【解决方案1】:

您需要处理ListViewonItemClick 中的点击。只需检查这是adapter 中的第一项还是最后一项,然后以这种方式处理点击。您需要将其视为ListView 中的一个项目。

【讨论】:

    【解决方案2】:

    我发现了一些问题:

    • 膨胀标头时,使用 getListView() 作为第二个参数(root,现在你有 null)l
    • 标题应该是视图还是视图组?我最终在这些情况下使用了 ViewGroup。
    • 最后——也许您应该在标题中的按钮上设置点击侦听器而不是标题本身?

    【讨论】:

    • 第三个项目符号修复了它,同时确保在创建按钮时使用标题视图。它更接近我想要的。
    【解决方案3】:

    有一种更简单的解决方案:

    只需为应用的视图设置一个“OnClickListener”:

    View view = inflater.inflate(R.layout.xxx, null);
    view.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {
            //do something
        }
    });
    

    很简单的事情就解决了!

    【讨论】:

      【解决方案4】:

      带有页脚的示例:

      mYourListView.addFooterView(footer, null, true);
      

      然后在 OnItemClickListener 中可以查看:

      @Override
      public void onItemClick(AdapterView<?> parent,
                                  View view, final int position, final long id) {
      
          if (id != -1) {
              // do whatever you do with list items
          } else {
              // do what you need after the footer been clicked
          }
      

      (如果您需要处理并且页眉和页脚单击,请检查页眉的位置 - 0 和页脚的 [adapter.getCount() - 1])

      这种方法将在单击页脚时提供与单击列表项相同的视觉效果。 (但如果您不需要该效果,只需将 OnClickListener 添加到页脚,它将拦截所有页脚点击)

      【讨论】:

        【解决方案5】:

        我认为列表视图和按钮正在争夺焦点,而您的列表视图正在获胜。 您必须为按钮使用 onTouchListener。

        还有另一种选择,它可以在页脚上设置以下内容。创建了另一个方法重载,但它没有出现在文档中,我不得不检查在线文档:

        mylistView.addFooterView(footerView, null, false);

        其中 false 告诉页脚其不可选择。我自己对此进行了测试,页脚内的按钮现在可以响应触摸。我希望这是一个可以接受的答案。

        【讨论】:

          【解决方案6】:

          什么对我有用:

          膨胀标题视图时,在将其添加到列表视图之前,我使用该视图获取子视图并在其上添加点击侦听器

          myHeaderView.findViewById(R.id.myButton).setOnClickListener(new OnClickListener() { ... } );
          

          另外,当我将它添加到 listView 时,我使用了将第三个变量设置为 true 的重载构造函数

          mListView.addHeaderView(myHeaderView, null, true);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-08-02
            • 2012-10-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-13
            • 1970-01-01
            相关资源
            最近更新 更多