我正在使用android.support.design.widget.TabLayout。 它有两个标签, 如果用户选择第二个选项卡在特定条件下,我希望用户重定向到第一个选项卡,并禁止他转到sencond选项卡,直到条件匹配。 为了达到这个目的,我试过了,
tabLayout.getTabAt(0).select();
但它没有重新选择第一个标签
答案 0 :(得分:47)
这是因为该视图仍未正确初始化,并且您正在尝试执行某些操作。
作为解决方案,您只需在选择特定选项卡之前放置一个 hadler 。
new Handler().postDelayed(
new Runnable(){
@Override
public void run() {
tabLayout.getTabAt(yourTabIndex).select();
}
}, 100);
答案 1 :(得分:1)
这对我有用:
int tabIndex = 2;
tabLayout.setScrollPosition(tabIndex,0f,true);
viewPager.setCurrentItem(tabIndex);
答案 2 :(得分:0)
您可以在 <script>
$(function() { $( "#datepicker1" ).datepicker({
dateFormat: 'yy-mm-dd',
});
$("#datepicker1").on("change",function(){
date = $(this).val();
alert(date);
});
});
$(function() {
$( "#datepicker2" ).datepicker({
dateFormat: 'yy-mm-dd',
});
$("#datepicker2").on("change",function(){
todate = $(this).val();
alert(todate);
});
});
$("#button2").click(function(){
var titel = $("#eTitel").val();
var descritption = $("#eDesc").val();
var date = $('input[name=datepicker1]');
var todate = $('input[name=datepicker2]');
if(titel == " " && descritption == " " && date == " " && todate == " ")
{
alert("values are missing");
}
else{
$.ajax({
type:"POST",
url: "olle.php",
data:{
titel: titel,
descritption: descritption,
date: date,
todate: todate,
},
success: function (msg){
$("#eTitel").val("");
$("#eDesc").val("");
$("#datepicker1").val("");
$("#datepicker2").val("");
},
error: function(){
alert("error didnt insert");
}
});
}
});
</script>
。
答案 3 :(得分:0)
这是我的设置。对我来说很好。
//declare your tabs to be add on
TabLayout tlDailyView;
private TabLayout.Tab tabAppointment, tabSlots;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_daily_view, container, false);
initializeMembers();
setupTabLayout();
return view;
}
private void setupTabLayout() {
tlDailyView.addTab(tabAppointment, 0, true);
tlDailyView.addTab(tabSlots, 1, true);
tlDailyView.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
switch (tab.getPosition()) {
case 0:
//open fragment at position 0 here
case 1:
//open fragment at position 1 here
break;
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
private void initializeMembers() {
tabSlots = tlDailyView.newTab();
tabAppointment = tlDailyView.newTab();
tabAppointment.setText(R.string.tab_appts).select();
tabSlots.setText(R.string.tab_slots);
}
不要忘记初始化上面的标签布局。
答案 4 :(得分:0)
tabLayout.getTabAt(index specific).select();
答案 5 :(得分:0)
为时已晚,但可能会对其他开发人员有所帮助。
如果您进入内部,看看内部如何实现tabLayout.getTabAt(tabIndex).select();
。您将了解到,它会将您的流程发送到
onTabReselected(tab: TabLayout.Tab?)
您的流程没有进入
onTabSelected(tab: TabLayout.Tab?)
如果您的当前标签和 tabIndex 相同。因此,考虑这一点非常重要。
答案 6 :(得分:-1)
Mihir的回答给了我一个尝试的想法。似乎不需要硬编码计时器就可以工作,并且还可以正确更新所选标签的滚动条:
final TabLayout tabLayout = ...;
tabLayout.postOnAnimation(new Runnable() {
@Override
public void run() {
tabLayout.getTabAt(2).select();
}
});