2017-08-01 69 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]; 
    } 
}