问候,
我在点击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");
}
答案 0 :(得分:19)
如果要查看单击某个特定选项卡,则需要将监听器添加到选项卡本身,而不是TabHost。
选项卡实现中的视图层次结构为:
通过调用:tabHost.addTab(tabHost.newTabSpec(""));
然后,您可以通过调用getTabWidget().getChildAt(4);
实际上,您正在将OnClickListener
添加到TabWidget的子项中。您现在可以获取单个标签上的点击次数。但是,这将覆盖单击选项卡时更改内容的默认行为。因此,为了让您的内容发生变化,您的OnClickListener
将需要为您做到这一点。
这是一个完整的示例,可让您拦截点击事件,并更改标签下方的内容:
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 );
}
}
});
答案 1 :(得分:10)
使用setOnTabChangedListener
代替OnClickListener
;)
static TabHost tabHost;
tabHost = getTabHost();
tabHost.setOnTabChangedListener(new OnTabChangeListener() {
@Override
public void onTabChanged(String arg0) {
Log.i("******Clickin Tab number ... ", "" + tabHost.getCurrentTab());
}
});
答案 2 :(得分:2)
你的条款错了,使用:
...
if (getTabHost().getCurrentTabTag().equals(myTabTag) == false) {
getTabHost().setCurrentTab(myTabIndex );
}
...
答案 3 :(得分:0)
进入我的代码,它显示了一些错误并要求我创建新的方法 那些名字,如getTabWidget(),getTabHost()等。等待你的 响应。
试试这个
tabHost.getTabHost().setCurrentTab(myTabIndex);