如何处理PagerSlidingTabStrip中第一个标签的句柄

时间:2016-03-07 10:16:06

标签: android pagerslidingtabstrip

我有一个PagerSlidingTabStrip,只有在PagerSlidingTabStrip中点击第一个标签页时才需要做一些特别的事情。即使第一个选项卡可见,也必须运行此代码。

我不需要pageChangeListener因为只有在页面被更改时才会触发。我想在PagerSlidingTabStrip的第一个标签页视图中点击监听器。

3 个答案:

答案 0 :(得分:0)

您必须实施下面的页面更改列表

String output = "";
for(String each:parts){
    output=output+each;
}

答案 1 :(得分:0)

为此你需要编辑lib。

PagerSlidingTabStrip.java中的

您需要为点击列表器添加一些额外的代码,例如

private OnTabClickListener onTabClickListener = null;

//interface with ontabclick method
public interface OnTabClickListener {
    public void onTabClick(View v,int position);
}

//init interface using setOnTabClickListener method.
public void setOnTabClickListener(OnTabClickListener onTabClickListener){
    this.onTabClickListener = onTabClickListener;
}

在放入此代码后,您需要修改addTab文件的PagerSlidingTabStrip.java方法,例如

private void addTab(final int position, View tab) {
    tab.setFocusable(true);
    tab.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            //editation
            if(onTabClickListener != null) {
                onTabClickListener.onTabClick(v,position);
            }
            /////////////////////////////////////////

            pager.setCurrentItem(position);


        }
    });

    tab.setPadding(tabPadding, 0, tabPadding, 0);
    tabsContainer.addView(tab, position, shouldExpand ? expandedTabLayoutParams : defaultTabLayoutParams);
}

现在在您的主要代码中。

tabs.setOnTabClickListener(new PagerSlidingTabStrip.OnTabClickListener() {

        @Override
        public void onTabClick(View v,int position) {
            // do stuf here
        }
    });

答案 2 :(得分:0)

我尝试使用反射来获取私有方法。 我的代码:

        try {
        Field tabsContainerField = PagerSlidingTabStrip.class.
                getDeclaredField("tabsContainer");
        tabsContainerField.setAccessible(true);
        LinearLayout tabContainer = (LinearLayout) tabsContainerField.get(mSlidingTabLayout);
        View child = tabContainer.getChildAt(0);

       //now i can do anything with view.
    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }catch (Exception e){
        e.printStackTrace();
    }

我知道这不是很好的方法之一。如果有人知道那么请分享。