Reputation:
I just created menu like this as a Bottom Bar
<?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>
and created also an getter and setter class,I have also created An adapter with an holder and this is my adapter class
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;
}
}
This is Activity Code
I just want to set icon in the menu like I set text which is also in the menu like this
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);
but for an icon not for textview if any thing unclear please just notify me sorry for bad english
Upvotes: 1
Views: 304
Reputation: 191738
I just want to set icon in the menu like I set text
Where exactly are you setting the Text? This adapter isn't being used...
customBottomBarAdapter = new CustomBottomBarAdapter(this,R.menu.bottombar_menu,bottomBarArray);
You actually are setting the text with this...
mBottomBar.setItems(R.menu.bottombar_menu);
Basically, R.menu
resources aren't to be loaded into a ArrayAdapter
, generally, only R.layout
values are.
In your activity, you would need something like this
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
As I commented, that wouldn't work because that method isn't public (and actually doesn't update the icon at all).
There is an open issue for it.
https://github.com/roughike/BottomBar/issues/659
Overall, you seem to have a TabLayout
for the "horizontal" views, so I would use that instead of it and a BottomBar
.
You actually can very easily set the icons of a TabLayout
.
OR use the actual Android Support BottomNavigationView
, which again, has the ability to change the icons.
Upvotes: 1