不兼容的类型java.lang.charSquence found int
我是新来的android,并试图创建一些选项卡活动添加到我的导航抽屉。 所以我很好地使用字符串来解决它。 问题出现时,我现在想要添加图标到我的tabbs而不是字符串。 我用一个图标替换我的字符串数组,但然后我得到incompatibilty错误。不兼容的类型java.lang.charSquence found int
我知道我应该如何将这些图标从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];
}
}`
因为标签是int[]
所以你打破对方法应该返回什么合同,这是无效的
public CharSequence getPageTitle(int position) {
return tabs[position];
}
。
由于该方法正在返回一个CharSequence,你也可以返回任何实现该接口的类。像CharBuffer中,段字符串,StringBuffer的或StringBuilder的,字符串是最有可能是:)
类似:
return String.valueOf(tabs[position]);
BTW:检查你的代码就会发现这一点:
int tabs[]={R.drawable.ic_child_care_black_24dp....
因此,将这些ID从drawables转换为字符串没有太大意义,因为这不会为用户带来太多有用的信息....请更新问题并告诉我们yoyu试图实现!
试试这个里面的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;
}
我没有看到这是怎么回事帮我,因为在最后我仍然无法分析可绘制到getpageTitle() – alvinMemphis
做到这一点的方式,而不是在getpage标题中。你说你想把字符串标题改成一个图标,所以我有同样的问题,并且这解决了我的问题,从getpage标题中删除代码并尝试执行此操作,如果Works已经执行好了。 :) @alvinMemphis –
tabs[position]
返回int
和getPageTitle
需要你需要手动设置它的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;
}
tabs[position]
的类型是int
,但getPageTitle(int position)
应返回CharSequence对象。尝试用Integer.toString(tabs[position]);
替换你的return语句
你可以创建一个字符串数组来存储每个标签的标题。
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];
}
}
我试图让我的标签显示可绘制的不是字符串 – alvinMemphis