2015-11-06 6 views
0

У меня есть один вопрос, как реализовать значки для tablayout.Как добавить значки Tablayout

У меня есть 3 вкладки и для всех вкладок У меня есть значки, которые выбраны и не выбраны. (Бело-желтый цвет).

Но, не знаю, как их реализовать.

Вот мой класс UserActivity:

public class UserActivity extends AppCompatActivity { 
    FragmentPagerAdapter adapterViewPager; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_user); 
     // Get the ViewPager and set it's PagerAdapter so that it can display items 
     ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
     adapterViewPager = new UserFragmentPagerAdapter(getSupportFragmentManager()); 
     viewPager.setAdapter(adapterViewPager); 

     // Give the TabLayout the ViewPager 
     TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs); 
     tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
     tabLayout.setTabMode(TabLayout.MODE_FIXED); 
     tabLayout.setupWithViewPager(viewPager); 
     tabLayout.setTabTextColors(getResources().getColorStateList(R.color.selector)); 
    } 

UserFragmentPageAdapter:

public UserFragmentPagerAdapter(FragmentManager fragmentManager) { 
     super(fragmentManager); 
    } 

    @Override 
    public int getCount() { 

     return NUM_ITEMS; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: // Fragment # 0 - This will show FirstFragment 
       return SmallMoveFragment.newInstance(0, "Small Move"); 
      case 1: // Fragment # 0 - This will show FirstFragment different title 
       return DeliveryFragment.newInstance(1, "Delivery"); 
      case 2: // Fragment # 1 - This will show SecondFragment 
       return GarbageFragment.newInstance(2, "Garbage"); 
      default: 
       return null; 
     } 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: // Fragment # 0 - This will show FirstFragment 
       return "Small Move"; 
      case 1: // Fragment # 0 - This will show FirstFragment different title 
       return "Delivery"; 
      case 2: // Fragment # 1 - This will show SecondFragment 
       return "Garbage "; 
      default: 
       return "No name"; 
     } 
    } 
} 

и один из 3 вкладок:

public class DeliveryFragment extends Fragment { 
     // Store instance variables 
     private String title; 
     private int page; 

     // newInstance constructor for creating fragment with arguments 
     public static DeliveryFragment newInstance(int page, String title) { 
      DeliveryFragment fragmentFirst = new DeliveryFragment(); 
      Bundle args = new Bundle(); 
      args.putInt("someInt", page); 
      args.putString("someTitle", title); 
      fragmentFirst.setArguments(args); 
      return fragmentFirst; 
     } 

     // Store instance variables based on arguments passed 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      page = getArguments().getInt("someInt", 0); 
      title = getArguments().getString("someTitle"); 
     } 

     // Inflate the view for the fragment based on layout XML 
     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.fragment_delivery, container, false); 
      TextView tvLabel = (TextView) view.findViewById(R.id.DeliveryTxt); 
      tvLabel.setText(page + " -- " + title); 
      return view; 
     } 
    } 

Любые идеи о том, где и как ... Я бы сделал это с TabHost, но я бы так хотел.

У меня есть 6 значок 48x48 в drawable/hdpi.

ответ

0

Есть решение, но не очень хорошо.

tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      int pos = tab.getPosition(); 
      switch (pos) { 
       case 0 : 
        tab.setIcon(R.drawable.select_0); 
        break; 
       case 1 : 
        tab.setIcon(R.drawable.select_1); 
        break; 
       case 2 : 
        tab.setIcon(R.drawable.select_2); 
        break; 
      } 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 
      int pos = tab.getPosition(); 
      switch (pos) { 
       case 0 : 
        tab.setIcon(R.drawable.unselect_0); 
        break; 
       case 1 : 
        tab.setIcon(R.drawable.unselect_1); 
        break; 
       case 2 : 
        tab.setIcon(R.drawable.unselect_2); 
        break; 
      } 
     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 

     } 
    }); 

но этот код может быть в вашем пользователе, pagerAdapter не поддерживает вкладку со значком напрямую.

+0

Отсутствует. public void onTabSelected (вкладка TabLayout.Tab) { int pos = tab.getPosition(); переключатель (pos) { кейс 0: tab.setIcon (R.drawable.select_0); break; case 1: tab.setIcon (R.drawable.select_1); break; кейс 2: tab.setIcon (R.drawable.select_2); break; } viewPager.setCurrentItem (pos); } – HaKu