我的主要活动中有一个选项卡布局。
在此选项卡布局中,我有3个片段。
由于某种原因,有时如果我在片段0上并单击以转到片段1(通过单击标题),它将触发片段0的OnClickListener并转到片段1。 这是一个很大的问题,因为此Click侦听器如果后面跟有意图,则始终打开一个窗口。
这是我的代码,由于它很大,我对其进行了很多简化:
片段适配器:
public class FragmentAdaptater extends FragmentPagerAdapter
{
private final List<Fragment> lstFragment = new ArrayList<>();
private final List<String> lstTitles = new ArrayList<>();
public FragmentAdaptater(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
return lstFragment.get(i);
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return lstTitles.get(position);
}
@Override
public int getCount() {
return lstTitles.size();
}
public void AddFragment (Fragment fragment , String title)
{
lstFragment.add(fragment);
lstTitles.add(title);
}
}
主要
public class MainActivity extends AppCompatActivity {
private Toolbar mToolbar;
private FragmentPagerAdapter fragmentadaptater2;
private ViewPager mviewpager;
private TabLayout mtablayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_2);
mviewpager = (ViewPager) findViewById(R.id.main_tabs_pager);
mToolbar = (Toolbar) findViewById(R.id.main_page_toolbar);
mtablayout = (TabLayout) findViewById(R.id.main_tabs);
setSupportActionBar(mToolbar);
fragmentadaptater2 = new FragmentAdaptater(getSupportFragmentManager());
((FragmentAdaptater) fragmentadaptater2).AddFragment(new YOURFRAGMENT(),"YOUR FRAGMENT NAME");
((FragmentAdaptater) fragmentadaptater2).AddFragment(new YOURFRAGMENT(),"YOUR FRAGMENT NAME");
((FragmentAdaptater) fragmentadaptater2).AddFragment(new YOURFRAGMENT(),"YOUR FRAGMENT NAME");
mviewpager.setAdapter(fragmentadaptater2);
mtablayout = (TabLayout) findViewById(R.id.main_tabs);
mtablayout.setupWithViewPager(mviewpager);
}
片段0引起误导的帖子(位置始终为0。我什至没有点击该项目...)
ListEvent.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
if (obj.getsTabPos()==0)
{
CommunActivit obj = new CommunActivit();
obj.setsEventID(List_Of_Event.get(position).getEventID());
obj.setsEventName(List_Of_Event.get(position).getEventName());
//a lot of code but this triggers always (the position is always 0)
if (List_Of_Event.get(position).getEventType().equals("3")) {
SendUserToEasyCount();
}
}
}
});
第1部分无故触发
compactCalendarView.setListener(new CompactCalendarView.CompactCalendarViewListener() {
@Override
public void onDayClick(Date dateClicked) {
//Intent,...
});
片段2不包含任何侦听器。
因此,如果我(通过单击)在3个片段之间进行导航,则它有时会触发监听器,有时会触发。 (只有当我单击选项卡时,用手指轻扫才没问题。监听器确实会出现问题,当不应该触发时会触发)
我认为问题在于初始化片段时的选项卡布局,可能有一个步骤必须将片段“推”到选项卡下方,并且无法正常工作)
(我发现的唯一解决方案是使用选项卡侦听器并保持选择的选项卡:如果所选的选项卡不是实际的选项卡,则侦听器内部的功能将不会发生。 但这不是一个好的解决方案,因为这不应该发生。)
主要XML
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:id="@+id/main_layout"
android:layout_height="match_parent"
tools:context=".com.example.thomas.activity.MainActivity"
android:background="@drawable/back_easy">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include
android:id="@+id/main_page_toolbar"
layout="@layout/app_bar_layout">
</include>
<android.support.design.widget.TabLayout
android:id="@+id/main_tabs"
android:layout_width="match_parent"
app:tabIndicatorColor="@android:color/white"
app:tabSelectedTextColor="@android:color/white"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
</android.support.design.widget.TabLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/main_tabs_pager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/appBarLayout">
</android.support.v4.view.ViewPager>
</RelativeLayout>