如何在适配器类的菜单中找到ViewById

时间:2017-02-27 14:12:16

标签: java android

我刚创建了这样的菜单作为底栏

<?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类,我还创建了一个带有holder的适配器,这是我的适配器类

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

这是活动代码

我只想在菜单中设置图标,就像我设置文本一样,菜单也在这个

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的图标,如果有任何不清楚的地方,请告诉我抱歉英文不好

1 个答案:

答案 0 :(得分: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,因此我会使用它来代替 a BottomBar

您实际上可以非常轻松地设置TabLayout的图标。

或者使用实际的Android支持BottomNavigationView,它再次可以更改图标。