2017-08-01 97 views
-2

我是新来的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]; 
    } 
}` 

回答

-1

因为标签是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试图实现!

+0

我试图让我的标签显示可绘制的不是字符串 – alvinMemphis

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; 
} 
+0

我没有看到这是怎么回事帮我,因为在最后我仍然无法分析可绘制到getpageTitle() – alvinMemphis

+0

做到这一点的方式,而不是在getpage标题中。你说你想把字符串标题改成一个图标,所以我有同样的问题,并且这解决了我的问题,从getpage标题中删除代码并尝试执行此操作,如果Works已经执行好了。 :) @alvinMemphis –

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; 
    } 
-1

tabs[position]的类型是int,但getPageTitle(int position)应返回CharSequence对象。尝试用Integer.toString(tabs[position]);替换你的return语句

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]; 
    } 
}