OnClickListener срабатывает сам по себе, когда выбрана вкладка - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть макет вкладки в моей основной деятельности.

В этой вкладке макета у меня есть 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>
...