我的Android应用中有一个tabview,带有3个标签。标签都运行正常。
现在,我想在单击当前活动选项卡的选项卡(顶部)时执行一些额外的逻辑。
以下是一个例子:
在我的一个标签中,我为用户提供了一个选项,可以按不同顺序对事物进行排序。当按下当前活动选项卡的选项卡时,我想重置所有这些排序。
是否可以捕获tabview中的标签点击事件并执行一些额外的逻辑?
编辑:为了清晰而编辑。
答案 0 :(得分:4)
这是您的代码应该如何工作:
getTabWidget().getChildAt(getTabHost().getCurrentTab()).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//do whatever you need
}
});
答案 1 :(得分:3)
如果你想要寻找解决方案,我可能会找到一个解决方案。 看看这里:Android TabWidget detect click on current tab
答案 2 :(得分:3)
我找到了一个简洁易用的解决方案,用于检测所选标签上的点击次数
步骤:
1:在课堂上扩展TabActivity。 2:在onResume()方法中实现以下方法
对于每个标签(i)实现:
TabHost tabHost = getTabHost();
public void onResume() {
super.onResume();
tabHost.getTabWidget().getChildAt(0).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
count++;
tabHost.setCurrentTab(0);
//based on your count value..you can do anything...like going back to homepage...
// similar thing exist on iphone (double tab a tab..it takes back to homepage)
}
});
}
由于我们总是有固定数量的标签,因此单独实施它不是问题。
答案 3 :(得分:0)
for(int i=0;i<tabHost.getTabWidget().getChildCount();i++)
{
getTabWidget().getChildAt(i).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (getTabHost().getCurrentTabTag().equals(v.getTag()))
{
int nextTab = getTabHost().getCurrentTab();
tabHost.setCurrentTab(prevTab);
tabHost.setCurrentTab(nextTab);
prevTab = nextTab;
}
else
tabHost.setCurrentTabByTag((String) v.getTag());
}
});
}
您需要一个全局变量;
private int prevTab = 1; //any tab except the initial one.
此代码适用于我。有点难看的是你必须为标签和视图设置相同的标签 例如;
intent = new Intent().setClass(this, AnaSayfa.class);
spec = tabHost.newTabSpec("firstTab").setIndicator(makeTabIndicator(R.drawable.firstTab, "First Tab" , "firstTab"))
.setContent(intent);
tabHost.addTab(spec);
和makeTabIndicator方法就是这样,
private View makeTabIndicator(int drawable, String text, String viewTag){
View view = LayoutInflater.from(this).inflate(R.layout.tab_layout, null);
ImageView image = (ImageView) view.findViewById(R.id.imageView1);
image.setImageResource(drawable);
image.setAdjustViewBounds(true);
TextView tv = (TextView) view.findViewById(R.id.textView1);
tv.setText(text);
view.setTag(viewTag);
return view;
}