Android 图标未随自定义选项卡布局而更改

Android 图标未随自定义选项卡布局而更改,android,tabs,icons,Android,Tabs,Icons,我正在尝试使用自定义选项卡布局来实现badgeView,但选中选项卡后,选项卡中的图标不会再次更改。在使用“自定义表格布局”之前,选中选项卡时,选项卡中的图标将从灰色变为白色。这是java文件,我遗漏了什么吗 public class MainActivity extends BaseActivity implements IMainView, TabLayout.OnTabSelectedListener { private TabLayout tlMain; private

我正在尝试使用自定义选项卡布局来实现badgeView,但选中选项卡后,选项卡中的图标不会再次更改。在使用“自定义表格布局”之前,选中选项卡时,选项卡中的图标将从灰色变为白色。这是java文件,我遗漏了什么吗

public class MainActivity extends BaseActivity implements IMainView, TabLayout.OnTabSelectedListener {

    private TabLayout tlMain;
    private ViewPager vpMain;
    private PagerAdapter pagerAdapter;
    private MainPresenter mainPresenter;
    private int[] tabIcons = {R.mipmap.ic_feeds_shade, R.mipmap.ic_notifications_shade
            ,R.mipmap.ic_sms_shade, R.mipmap.ic_event_note_shade
            ,R.mipmap.ic_account_circle_copy};
    private int[] tabIconsWhite = {R.mipmap.ic_feeds_putih, R.mipmap.ic_notifications_putih
            ,R.mipmap.ic_sms_putih, R.mipmap.ic_event_note_putih
            ,R.mipmap.ic_account_circle_putih};
    private String[] title = {"Laporan","Pemberitahuan","Perpesanan"
            ,"Agenda","Profile"};
    private int[] unread = {0,7,0,0,0};
    private Toolbar toolbar;
    private ImageView iconTabItem;
    private TextView badgeView;

    public static void start(Context context){
        Intent intent = new Intent(context, MainActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        intent.putExtra("isLogin", true);
        context.startActivity(intent);
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.view_main);
        mainPresenter = new MainPresenter(this);
        mainPresenter.onCreate(context);
    }

    private void goToLogin(){
        LoginActivity.start(context);
    }

    @Override
    public void onTabSelected(TabLayout.Tab tab) {
        vpMain.setCurrentItem(tab.getPosition());
        tab.setIcon(tabIconsWhite[tab.getPosition()]);
        switch (tab.getPosition()){
            case 0:
                vpMain.setCurrentItem(0);
                toolbar.setTitle(title[0]);
                break;
            case 1:
                vpMain.setCurrentItem(1);
                toolbar.setTitle(title[1]);
                break;
            case 2:
                vpMain.setCurrentItem(2);
                toolbar.setTitle(title[2]);
                break;
            case 3:
                vpMain.setCurrentItem(3);
                toolbar.setTitle(title[3]);
                break;
            case 4:
                vpMain.setCurrentItem(4);
                toolbar.setTitle(title[4]);
                break;
            default:
        }
    }

    @Override
    public void onTabUnselected(TabLayout.Tab tab) {
        tab.setIcon(tabIcons[tab.getPosition()]);
    }

    @Override
    public void onTabReselected(TabLayout.Tab tab) {

    }

    @Override
    public void initView() {
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        toolbar.setTitle(title[0]);
        tlMain = (TabLayout) findViewById(R.id.tl_main);
        tlMain.setupWithViewPager(vpMain);
        tlMain.addTab(tlMain.newTab());
        tlMain.addTab(tlMain.newTab());
        tlMain.addTab(tlMain.newTab());
        tlMain.addTab(tlMain.newTab());
        tlMain.addTab(tlMain.newTab());
        tlMain.setTabGravity(TabLayout.GRAVITY_FILL);
        tlMain.setOnTabSelectedListener(this);
        pagerAdapter = new PagerAdapter(getSupportFragmentManager(), tlMain.getTabCount());
        vpMain = (ViewPager) findViewById(R.id.vp_main);
        vpMain.setAdapter(pagerAdapter);
        vpMain.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tlMain));
        if(getIntent().getExtras() != null){
            Bundle bundle = getIntent().getExtras();
            if(!bundle.getBoolean("isLogin")){
                goToLogin();
            }
        }else{
            goToLogin();
        }

        try {
            for (int i = 0; i < 6; i++){
                tlMain.getTabAt(i).setCustomView(prepareTabView(i));
            }
        } catch (Exception e){
            e.printStackTrace();
        }
    }

    public View prepareTabView(int pos){
        View view = getLayoutInflater().inflate(R.layout.custom_tablayout, null);
        iconTabItem = (ImageView)view.findViewById(R.id.icon_tabitem);
        badgeView = (TextView)view.findViewById(R.id.tab_count);
        iconTabItem.setImageResource(tabIcons[pos]);
        if (unread[pos]>0){
            badgeView.setVisibility(View.VISIBLE);
            badgeView.setText(String.format(Locale.getDefault(), "%d", unread[pos]));
        } else
            badgeView.setVisibility(View.GONE);
        return view;
    } }
public类MainActivity扩展了BaseActivity,实现了IMainView、TabLayout.OnTabSelectedListener{
私人表格布局;
专用可视寻呼机;
私人寻呼机;
私人主讲人主讲人;
private int[]选项卡图标={R.mipmap.ic\u feeds\u shade,R.mipmap.ic\u notifications\u shade
,R.mipmap.ic\u sms\u shade,R.mipmap.ic\u event\u note\u shade
,R.mipmap.ic\u account\u circle\u copy};
private int[]tabiconswite={R.mipmap.ic_feed_putih,R.mipmap.ic_notifications_putih
,R.mipmap.ic\u sms\u putih,R.mipmap.ic\u事件\u注释\u putih
,R.mipmap.ic_account_circle_putih};
私有字符串[]title={“Laporan”、“Pemberitahuan”、“Perpesanan”
,“议程”,“概况”};
私有int[]未读={0,7,0,0,0};
专用工具栏;
私有ImageView iconTabItem;
私有文本视图;
公共静态void开始(上下文){
意向意向=新意向(上下文,MainActivity.class);
intent.setFlags(intent.FLAG_ACTIVITY_NEW_TASK | intent.FLAG_ACTIVITY_CLEAR_TASK);
意图。putExtra(“isLogin”,真);
背景。开始触觉(意图);
}
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.view\u main);
mainPresenter=新的mainPresenter(此);
mainPresenter.onCreate(上下文);
}
私有无效goToLogin(){
LoginActivity.start(上下文);
}
@凌驾
已选择的公共选项卡(TabLayout.Tab){
setCurrentItem(tab.getPosition());
tab.setIcon(tabiconswite[tab.getPosition()]);
开关(tab.getPosition()){
案例0:
vpMain.setCurrentItem(0);
toolbar.setTitle(title[0]);
打破
案例1:
vpMain.setCurrentItem(1);
toolbar.setTitle(title[1]);
打破
案例2:
vpMain.setCurrentItem(2);
toolbar.setTitle(title[2]);
打破
案例3:
vpMain.setCurrentItem(3);
toolbar.setTitle(title[3]);
打破
案例4:
vpMain.setCurrentItem(4);
toolbar.setTitle(title[4]);
打破
违约:
}
}
@凌驾
已选择的公共选项卡(TabLayout.Tab){
tab.setIcon(tabIcons[tab.getPosition()]);
}
@凌驾
已重新选择公共选项卡(TabLayout.Tab){
}
@凌驾
公共视图(){
toolbar=(toolbar)findviewbyd(R.id.toolbar);
设置支持操作栏(工具栏);
toolbar.setTitle(title[0]);
tlMain=(TabLayout)findviewbyd(R.id.tl_main);
tlMain.setupWithViewPager(vpMain);
tlMain.addTab(tlMain.newTab());
tlMain.addTab(tlMain.newTab());
tlMain.addTab(tlMain.newTab());
tlMain.addTab(tlMain.newTab());
tlMain.addTab(tlMain.newTab());
tlMain.设置重力(表布局、重力和填充);
tlMain.setontAbsSelectedListener(此);
pagerAdapter=新的pagerAdapter(getSupportFragmentManager(),tlMain.getTabCount());
vpMain=(ViewPager)findViewById(R.id.vp_main);
vpMain.setAdapter(pagerAdapter);
vpMain.addOnPageChangeListener(新的TabLayout.TabLayoutOnPageChangeListener(tlMain));
if(getIntent().getExtras()!=null){
Bundle Bundle=getIntent().getExtras();
if(!bundle.getBoolean(“isLogin”)){
goToLogin();
}
}否则{
goToLogin();
}
试一试{
对于(int i=0;i<6;i++){
tlMain.getTabAt(i).setCustomView(prepareTabView(i));
}
}捕获(例外e){
e、 printStackTrace();
}
}
公共视图准备视图(内部位置){
视图=GetLayoutFlater()。充气(R.layout.custom_tablayout,null);
iconTabItem=(ImageView)view.findViewById(R.id.icon\u选项卡项);
badgeView=(TextView)view.findViewById(R.id.tab\u计数);
setImageResource(tabIcons[pos]);
如果(未读[pos]>0){
badgeView.setVisibility(View.VISIBLE);
badgeView.setText(String.format(Locale.getDefault(),“%d”,未读[pos]);
}否则
badgeView.setVisibility(View.GONE);
返回视图;
} }
这是view_main.xml

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <include layout="@layout/dc_toolbar" />

        <android.support.design.widget.TabLayout
            android:id="@+id/tl_main"
            android:layout_width="match_parent"
            android:layout_height="65dp"
            android:background="@color/colorPrimaryDark"
            app:tabIndicatorColor="@color/dc_white"
            app:tabIndicatorHeight="4dp"
            app:tabSelectedTextColor="@color/dc_yellow"
            app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget"
            app:tabTextColor="@color/dc_white" />
    </android.support.design.widget.AppBarLayout>


    <android.support.v4.view.ViewPager
        android:id="@+id/vp_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</android.support.design.widget.CoordinatorLayout>

这是用于custom_tablayout.xml的

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/icon_tabitem"
            android:src="@mipmap/ic_notifications_shade" />

        <TextView
            android:id="@+id/tab_count"
            android:layout_width="12dp"
            android:layout_height="12dp"
            android:background="@drawable/badge_item_count"
            android:gravity="center"
            android:text="99"
            android:padding="1dp"
            android:textColor="@color/dc_white"
            android:textSize="6sp"
            android:textStyle="bold"
            android:layout_alignEnd="@+id/icon_tabitem"/>
    </RelativeLayout>
</RelativeLayout>


感谢您的帮助:)

您可以尝试创建一个函数,将所有图标更改回默认值,然后在分配选定图标之前调用它:)

您可以尝试创建一个函数,将所有图标更改回默认值,然后在分配选定图标之前调用它:)

您可以使用下面的代码段

private void updateTabIcon() {


            mTabLayout.setupWithViewPager("your_pager");

            for (int pos = 0; pos < "your_total_tab_count"; pos++) {
                TabLayout.Tab tab = mTabLayout.getTabAt(pos);
                assert tab != null;
                tab.setCustomView(R.layout."your_custom_tab_view");
                ImageView tabIcon = (ImageView) tab.getCustomView().findViewById(R.id.icon);
                TextView badgeView = (TextView) tab.getCustomView().findViewById(R.id.text1);
               //Use switch or if to set particular icon to particular tab
                badgeView.setText("your_badge_Text");
                tabIcon.setImageResource("your_selector_icon_drawable");

        }
    }
private void updateTabIcon(){
mTabLayout.setupWithViewPager(“您的寻呼机”);
对于(int pos=0;pos<“您的总选项卡计数”pos++){
TabLayout.Tab Tab=mTabLayout.getTabAt(位置);
断言选项卡!=null;
设置自定义视图(R.layout.“您的自定义”选项卡视图);
ImageView选项卡图标=(ImageView)选项卡.getCustomView().findViewById(R.id.icon);
TextView badgeView=(TextView)tab.getCustomView().findViewById(R.id.text1);
//使用开关或if将特定图标设置为特定选项卡
badgeView.setText(
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/"selected_drawable" android:state_selected="true" />

    <item android:drawable="@drawable/"unselected_drawable" android:state_selected="false"  />
</selector>