У меня есть макет вкладки в моей основной деятельности.
В этой вкладке макета у меня есть 3 фрагмента.
По какой-то причине, иногда, если я нахожусь на фрагменте 0 и щелкаю, чтобы перейти к фрагменту 1 (нажав на заголовок), он запускает OnClickListener из фрагмента 0 и переходит к фрагменту 1. Это большая проблемапотому что это слушатель щелчка, если сопровождаемый намерением, таким образом, это всегда открывает окна.
Вот мой код, я сильно упростил его, потому что он большой:
Адаптер фрагмента:
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);
}
}
MAIN
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 фрагментами, это иногда вызывает или не срабатывает слушателя.(Нет проблем, когда я провожу пальцем, только если я нажимаю на вкладку. Это действительно проблема со слушателями, которые запускаются, когда это не должно)
Я думаю, что проблема в макете вкладки, когда онаинициализирует фрагмент, вероятно, существует шаг, когда он должен «толкнуть» фрагмент под вкладкой, и он не работает должным образом)
(Единственное решение, которое я нашел, это использовать прослушиватель вкладок и держать вкладку выделенной.: если выбранная вкладка не является действительной вкладкой, функция внутри слушателя не произойдет. Но это не хорошее решение, потому что этого не должно быть.)
MAIN 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>