我是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];
}
}`
答案 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]
返回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;
}
答案 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]);