【问题标题】:how to enable footer being clickable and set listener on it?如何使页脚可单击并在其上设置侦听器?
【发布时间】:2012-05-15 15:50:16
【问题描述】:

这是活动

private View footer;
private Button btnmore;

linear = (LinearLayout) findViewById(R.id.layout_content);
    linear.setVisibility(View.VISIBLE);

    LayoutInflater liInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    linear.addView(liInflater.inflate(R.layout.main_particularcategoryallnewslist, null));
linear.addView(liInflater.inflate(R.layout.main_particularcategoryallnewslistfv, null));
    footer = (View)getLayoutInflater().inflate(R.layout.main_particularcategoryallnewslistfv, null);
btnmore = (Button)findViewById(R.id.btn_more); 

ListView lv = (ListView) findViewById(android.R.id.list);
SimpleAdapter adapter = new SimpleAdapter(this, fillMaps,
            R.layout.main_particularcategoryallnewslist, from, to);
    lv.addFooterView(footer); <-- how to set footer being clickable?
    lv.setAdapter(adapter);

在页脚中,我有一个按钮,但我在它上面设置了监听器也没有响应,我认为页脚必须启用才能被点击,然后才能点击按钮。

lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            Intent intent = new Intent(Main_ParticularCategoryAllNews.this,
                    Main_ParticularNewsDetail.class);
            bundle = new Bundle();
            bundle.putInt("newsid", newsid[arg2]);
            intent.putExtras(bundle);
            startActivity(intent);
        }
    });

    btnmore.setOnClickListener(new OnClickListener() {
        public void onClick(View arg0) {
            if (isOnline() == true) {
                linear2.setVisibility(View.VISIBLE);
                AlphaAnimation alpha = new AlphaAnimation(0.5F, 0.5F);
                alpha.setDuration(15);
                alpha.setFillAfter(true);
                linear.startAnimation(alpha);
                btnrefresh.setVisibility(View.INVISIBLE);
                webservice.UpdateMoreCatNews(catnewsid);
                int secondsDelayed = 3;
                new Handler().postDelayed(new Runnable() {
                    public void run() {
                        startActivity(new Intent(Main_ParticularCategoryAllNews.this,
                                Main_AllLatestNews.class));
                        finish();
                    }
                }, secondsDelayed * 1000);
            } else {
                toast = Toast
                        .makeText(
                                Main_ParticularCategoryAllNews.this,
                                "Your device is not connect to internet, fail to update news!",
                                Toast.LENGTH_SHORT);
                toast.setGravity(Gravity.CENTER_VERTICAL
                        | Gravity.CENTER_HORIZONTAL, 0, 0);
                toast.show();
            }
        }
    });

页脚被点击时如何设置监听器?

【问题讨论】:

  • 页脚出现在列表视图中最后一个元素的下方

标签: android listview footer


【解决方案1】:

listview 和 button 争夺焦点,listview 获胜。

在页脚设置以下内容。 false 告诉页脚它不可选择:

 mylistView.addFooterView(footerView, null, **false**);

或者,您可以按照 FireDevil 在此处的建议使用 OnClickListener

【讨论】:

    【解决方案2】:

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

    只需将OnClickListener 设置为已应用的View

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

    很简单的事情就解决了!

    【讨论】:

    • 我这样做了,但是将onClickListener 设置为视图内的一个按钮,并调用jsemanue 提到的函数。否则 onItemClick 会被触发。
    【解决方案3】:

    我建议您使用以下提示:

    1. 制作一个相对布局作为你的根布局
    2. 在其上放置您的页脚布局和您的 ListView
    3. 在你的 ListView 中添加这个属性:

      android:layout_above="@id/your_footer_layout_id"
      

    有关详细信息,请参阅this 链接。您可以通过以下onClick 方法检查视图是否被点击:

    @Override
    public void onClick(View v) {
    
        switch(v.getId()){
    
        case R.id.my_footer: 
            Toast.makeText(getContext(), "footer clicked",Toast.LENGTH_LONG).show();
            break;
    
        case R.id.my_header: 
            Toast.makeText(getContext(), "header clicked", Toast.LENGTH_LONG).show();
            break;
        }
    }
    

    【讨论】:

    • 在页脚的 xml 中添加 android:clickable="true"
    • 然后在你的活动中设置一个点击监听器
    • 但是如何检查页脚是否被点击?
    • 查看更新的答案,希望sn-p对你有所帮助,在你的Activity中实现回调OnClickListener
    【解决方案4】:

    将页脚视图的根更改为使用&lt;merge /&gt; 而不是LinearLayoutListViewView 的父级必须是 AbsListView 类型。然后,在代码中,你会像这样膨胀你的页脚View

    liInflater.inflate(R.layout.main_particularcategoryallnewslistfv, lv, false);
    

    编辑

    &lt;merge /&gt; 部分可能是不必要的。尝试先将充气方法更改为上述方法。

    【讨论】:

    • 第二种布局使用线性布局,但不允许使用线性布局
    • 所以用我贴的方法给它充气。第二种布局是什么意思?
    • 第二个布局是 main_particularcategoryallnewslistfv xml 在这个 xml 中,我使用的是线性布局,但是因为 listview 使用的是 absolutelistview 布局,所以它不能添加到 listview 中。
    猜你喜欢
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 2023-02-02
    • 1970-01-01
    相关资源
    最近更新 更多