2017-02-27 44 views
1

我剛剛創建菜單這樣的底欄如何findViewById一個圖標菜單

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:id="@+id/bb_menu_recents" 
     android:icon="@drawable/floor" 
     android:title="Floor 1" /> 
    <item 
     android:id="@+id/floorNumber" 
     android:icon="@drawable/floor" 
     android:title="Floor 2" /> 
    <item 
     android:id="@+id/bb_menu_nearby" 
     android:icon="@drawable/floor" 
     android:title="Others" /> 
</menu> 

,也創造了一個getter和setter類適配器類,我還創建了一個適配器的持有者和這是我的適配器類

package abtech.waiteriano.com.waitrer.adapters; 

import android.app.Activity; 
import android.content.Context; 
import android.support.annotation.NonNull; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

import java.util.ArrayList; 

import abtech.waiteriano.com.waitrer.R; 
import abtech.waiteriano.com.waitrer.getters_and_setters.BottomBarItem; 

/** 
* Created by dell on 2/27/2017. 
*/ 

public class CustomBottomBarAdapter extends ArrayAdapter<BottomBarItem> { 
    Context context; 
    int layoutResourceId; 
    ArrayList<BottomBarItem> data = new ArrayList<BottomBarItem>(); 

    public CustomBottomBarAdapter(Context context, int layoutResourceId, ArrayList<BottomBarItem>data) { 
     super(context, layoutResourceId,data); 
     this.layoutResourceId = layoutResourceId; 
     this.context = context; 
     this.data = data; 
    } 

     @NonNull 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View row = convertView; 
      floorRecordHolder floorHolder = null; 

      if (row == null){ 
       LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
       row = inflater.inflate(layoutResourceId, parent, false); 

       floorHolder = new floorRecordHolder(); 
       floorHolder.floorNo = (TextView)row.findViewById(R.id.floorNumber); 

      }else { 
       floorHolder = (CustomBottomBarAdapter.floorRecordHolder) row.getTag(); 
      } 
      BottomBarItem bottomBarItem = data.get(position); 
      floorHolder.floorNo.setText(bottomBarItem.getFloorNo()); 
      return row; 
     } 

     static class floorRecordHolder{ 
      TextView floorNo; 
      ImageView floorImage; 
     } 
    } 

這是活動代碼

我只是想設置圖標,在菜單像我設置文本,這也是在這樣

01菜單
package abtech.waiteriano.com.waitrer; 

import android.os.Bundle; 
import android.support.design.widget.TabLayout; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 

import com.roughike.bottombar.BottomBar; 

import java.util.ArrayList; 
import java.util.List; 

import abtech.waiteriano.com.waitrer.adapters.CustomBottomBarAdapter; 
import abtech.waiteriano.com.waitrer.fragments.TablesFragment; 
import abtech.waiteriano.com.waitrer.getters_and_setters.BottomBarItem; 

public class TabsActivity extends AppCompatActivity { 

    private Toolbar toolbar; 
    private TabLayout tabLayout; 
    private ViewPager viewPager; 
    private BottomBar mBottomBar; 
    CustomBottomBarAdapter customBottomBarAdapter; 
    ArrayList<BottomBarItem> bottomBarArray = new ArrayList<BottomBarItem>(); 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_tabs); 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 


     mBottomBar = BottomBar.attach(this, savedInstanceState); 
     mBottomBar.setItems(R.menu.bottombar_menu); 
     customBottomBarAdapter = new CustomBottomBarAdapter(this,R.menu.bottombar_menu,bottomBarArray); 


     viewPager = (ViewPager) findViewById(R.id.viewpager); 

     /** 
     * Initializing the viewpager with fragments 
     */ 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 


     adapter.addFragment(new TablesFragment(), "Progress"); 
     adapter.addFragment(MyFragment.newInstance("Example1"), "Example1"); 
     adapter.addFragment(MyFragment.newInstance("Example2"), "Example2"); 
     adapter.addFragment(MyFragment.newInstance("Example3"), "Example3"); 

     viewPager.setAdapter(adapter); 

     tabLayout = (TabLayout) findViewById(R.id.tabs); 

     //adding viewpager to the tablayout 
     tabLayout.setupWithViewPager(viewPager); 
     tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE); 
    } 
    class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

     public ViewPagerAdapter(FragmentManager manager) { 
      super(manager); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return mFragmentList.get(position); 
     } 

     @Override 
     public int getCount() { 
      return mFragmentList.size(); 
     } 

     public void addFragment(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitleList.get(position); 
     } 
    } 
} 

    floorHolder.floorNo = (TextView)row.findViewById(R.id.floorNumber); 

但圖標不是TextView的,如果任何事情不清楚,請只是通知我對不起不好英語

+0

哪裏有底部欄的MenuInflater?我不認爲ArrayAdapter是你需要在這裏 –

+0

我剛剛創建了一個網格視圖像這樣只有一個項目,並使這個重複在數據庫中與選擇表單,我需要的所有我想要創建一個底部欄像我創建了一個網格視圖,我只是通過創建一個getter和setter類以及一個適配器類來實現網格視圖@ cricket_007 – 7arooney

+0

我在您的問題中看不到網格視圖。你有一個菜單XML,並用MenuInflater加載...你設置文本和圖標從一個MenuInflater,而不是一個ArrayAdapter –

回答

1

我只是想設置圖標,在菜單像我設置文本

你究竟在哪裏設置文本?此適配器不被使用......

customBottomBarAdapter = new CustomBottomBarAdapter(this,R.menu.bottombar_menu,bottomBarArray); 

你實際上是在設置這個文本...

mBottomBar.setItems(R.menu.bottombar_menu); 

基本上,R.menu資源不被加載到ArrayAdapter,一般,只有R.layout的值。


在你的活動,你會需要像這樣

mBottomBar = BottomBar.attach(this, savedInstanceState); 
mBottomBar.setItems(R.menu.bottombar_menu); 
BottomBarTab tab = mBottomBar.getTabWithId(R.id.floorNumber); 
mBottomBar.setIconResId(R.drawable.new_img); // This method doesn't work, though 

正如我評論,這是行不通的,因爲這種方法是不公開的(實際上是在不更新圖標所有)。

有一個開放的問題。

https://github.com/roughike/BottomBar/issues/659


總體來說,你似乎有「水平」意見TabLayout,所以我會用這個來代替它一個BottomBar

實際上,您可以非常輕鬆地設置TabLayout的圖標。

或者使用實際的Android支持BottomNavigationView,它可以再次改變圖標。

+0

非常感謝@ cricket_007這是非常有用的教程 – 7arooney

相關問題