android – 选项卡上的OnClickListener不起作用
作者:互联网
问候,
我在点击TabActivity当前选中的标签时尝试获取Click – 事件.只有在更改选项卡时才会调用onTabChangedHandler,而不是在单击当前活动的选项卡时调用.调试器告诉我在TabHost中为TabWidget注册了onClickListener.
我在注册错误的视图吗?
此外,我无法为选项卡创建上下文菜单,仅针对其内容,这个问题是否相关?
public class TestDroidViewTab extends TabActivity
implements TabContentFactory
, OnTabChangeListener, OnClickListener {
private static final String LOG_KEY = "TEST";
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final TabHost tabHost = getTabHost();
TabHost.TabSpec ts = tabHost.newTabSpec("ID_1");
ts.setIndicator("1");
ts.setContent(this);
tabHost.addTab(ts);
ts = tabHost.newTabSpec("ID_2");
ts.setIndicator("2");
ts.setContent(this);
tabHost.addTab(ts);
ts = tabHost.newTabSpec("ID_3");
ts.setIndicator("3");
ts.setContent(this);
tabHost.addTab(ts);
tabHost.setOnClickListener(this);
tabHost.setOnTabChangedListener(this);
}
public void onClick(View v) {
Log.d(LOG_KEY, "OnClick");
}
public void onTabChanged(String tabId) {
Log.d(LOG_KEY, "OnTabChanged");
}
解决方法:
如果要查看单击特定选项卡,则需要将监听器添加到选项卡本身,而不是TabHost.
选项卡实现中的视图层次结构是:
> TabHost
> TabWidget
>(标签)
>(标签)
> FrameLayout
在运行时通过调用tabHost.addTab(tabHost.newTabSpec(“”))添加选项卡;
然后,您可以通过调用以下方法获取各个选项卡的句柄:getTabWidget().getChildAt(4);
实质上,您将OnClickListener添加到TabWidget的子级.您现在可以获取单个标签上的点击次数.但是,这将覆盖单击选项卡时更改内容的默认行为.因此,要使您的内容发生变化,您的OnClickListener将需要为您执行此操作.
这是一个完整的示例,它允许您拦截click事件,并更改选项卡下面的内容:
final String myTabTag = "My Tab";
final int myTabIndex = 3;
getTabHost().addTab( getTabHost().newTabSpec(myTabTag) );
getTabWidget().getChildAt(myTabIndex).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (getTabHost().getCurrentTabTag().equals(myTabTag)) {
getTabHost().setCurrentTab(myTabIndex );
}
}
});
标签:android,onclick,android-tabhost 来源: https://codeday.me/bug/20190926/1821914.html