不兼容的类型java.lang.charSquence找到int

时间:2017-08-01 10:43:38

标签: java android arrays

我是Android的新手,并且正在尝试创建一些添加到导航抽屉的标签式活动。 所以我很好地使用弦乐很好。 当我现在想要在我的tabbs而不是字符串中添加图标时出现问题。 我用一个图标替换我的字符串数组,但后来我得到了不兼容的错误。

我知道应该如何将这些图标从int转换为字符串,但我真的无法弄清楚如何。

也试图找到不同的方法来实现图标,但它们都涉及我删除几乎我的整个代码。我需要帮助。

这是我的java类

package com.example.alvin.feedyourbaby;


/**
  * Created by alvin on 7/29/17.
 */

public class dataFragment extends Fragment {
View view;
ViewPager viewPager;
TabLayout tabLayout;

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup   container, @Nullable Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.sample, container, false);
    viewPager = (ViewPager) view.findViewById(R.id.viewpager);
    viewPager.setAdapter(new sliderAdapter(getChildFragmentManager()));
    tabLayout = (TabLayout) view.findViewById(R.id.sliding_tabs);
    tabLayout.post(new Runnable() {
        @Override
        public void run() {
            tabLayout.setupWithViewPager(viewPager);
        }
    });

    return view;
}
private class sliderAdapter extends FragmentPagerAdapter{


    final  int  tabs[]={R.drawable.ic_child_care_black_24dp    ,R.drawable.ic_menu_black_24dp, R.drawable.ic_add_black_24dp};


    public sliderAdapter(FragmentManager fm) {
        super(fm);
    }


    @Override
    public Fragment getItem(int position) {
        return new contentFragment();
    }

    @Override
    public int getCount() {
        return 3;
    }
    @Override
    public CharSequence getPageTitle(int position) {
        return tabs[position];
    }
}`

5 个答案:

答案 0 :(得分:0)

oncreate()

中尝试此操作
int  tabs[]={R.drawable.ic_child_care_black_24dp    ,R.drawable.ic_menu_black_24dp, R.drawable.ic_add_black_24dp};

        for (int i=0;i<tabLayout.getTabCount();i++){
            tabLayout.getTabAt(i).setIcon(tabs[i]);
        }

所以你的代码就像:

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup   container, @Nullable Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.sample, container, false);
    viewPager = (ViewPager) view.findViewById(R.id.viewpager);
    viewPager.setAdapter(new sliderAdapter(getChildFragmentManager()));
    tabLayout = (TabLayout) view.findViewById(R.id.sliding_tabs);
    tabLayout.post(new Runnable() {
        @Override
        public void run() {
            tabLayout.setupWithViewPager(viewPager);
        }
    });

    int  tabs[]={R.drawable.ic_child_care_black_24dp    ,R.drawable.ic_menu_black_24dp, R.drawable.ic_add_black_24dp};

            for (int i=0;i<tabLayout.getTabCount();i++){
                tabLayout.getTabAt(i).setIcon(tabs[i]);
            }


    return view;
}

答案 1 :(得分:0)

tabs[position]返回intgetPageTitle需要String您需要手动设置它:

@Override
    public CharSequence getPageTitle(int position) {
        String title = ""
        switch(position):
            case R.drawable.ic_child_care_black_24dp:
                title = "title 1";
                break;
            //code
        return title;
    }

答案 2 :(得分:0)

您可以创建一个字符串数组,存储每个标签的标题,如下所示。

private class sliderAdapter extends FragmentPagerAdapter{
private String[] pageTitle = {'Child Care', 'Menu', 'Add'};
//-----your rest of code here--------------
@Override
    public CharSequence getPageTitle(int position) {
        return pageTitle[position];
    }
}

答案 3 :(得分:-1)

这是无效的

public CharSequence getPageTitle(int position) {
    return tabs[position];
}

因为标签是int[]所以你违反了方法应该返回的合同。

因为该方法返回一个CharSequence,你也可以返回实现该接口的任何类。像CharBuffer,Segment,String,StringBuffer或StringBuilder,String最有可能是:)

类似的东西:

return String.valueOf(tabs[position]);

btw:检查你的代码会发现这个:

 int  tabs[]={R.drawable.ic_child_care_black_24dp....

所以将这些id从drawables转换为字符串没有多大意义,因为这并没有给用户带来太多可用的信息....请更新qustion并告诉我们yoyu想要实现的目标!

答案 4 :(得分:-1)

tabs[position]的类型为int,但getPageTitle(int position)应返回CharSequence对象。尝试用Integer.toString(tabs[position]);

替换return语句