选择选项卡时,OnClickListener会自行触发

时间:2019-04-22 17:32:57

标签: android android-fragments click onclicklistener android-tablayout

我的主要活动中有一个选项卡布局。

在此选项卡布局中,我有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>

0 个答案:

没有答案