java - 如何使用 fragment 自定义选项卡?

标签 java android android-fragments android-tabs

我只想将我的应用程序上的选项卡自定义为带有选择器的图片或我需要开始的东西?这是我的代码。 现在我的应用程序带有常规的黑色和蓝色选项卡,但我想对其进行自定义

我该怎么办? 这是我的代码:

A类

  public class ListFragment extends Fragment{

        basAdapterCustom adapter;
        ListView lv;
        ArrayList<Clock> list;
        private DbHandler hand;
        Context context;

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.list_fragment, container, false);
            context = getActivity();

            Log.d(TAG, "onCreateView");

            hand = new DbHandler(context);
            list = new ArrayList<Clock>();

            lv = (ListView) v.findViewById(R.id.listOfShifts);
            adapter = new basAdapterCustom(list, getActivity());
            lv.setAdapter(adapter);
            refreshList();
            return v;
        }



        //like on "resume":
        @Override
        public void setUserVisibleHint(boolean isVisibleToUser) {
            super.setUserVisibleHint(isVisibleToUser);
            // Make sure that we are currently visible
            if (this.isVisible()) {
                refreshList();
                if (!isVisibleToUser) {
                    // TODO stop
                }
            }
        }



        private void refreshList() {

            list = hand.getByWorkName();
            adapter = new basAdapterCustom(list,getActivity());

            lv.setAdapter(adapter);
        }

B类:

public class ClockFragment extends Fragment{


    DbHandler hand;


    Context context;
    @Override
    public View onCreateView(LayoutInflater inflater,
            @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.clock, container,false);

        context = getActivity();

        hand = new DbHandler(context);

        return v;
    }


    // ADD to .Db
    public void addToDb(View v){
        hand.add(new Clock(0, dateDay));    

    }


}

类mainActivity:

public class MainActivity extends FragmentActivity implements ActionBar.TabListener, OnPageChangeListener{

    public static final String TAG = "myClock";

    String[] tabMenu = {"FRAG A","FRAG B","FRAG C"};

    private ViewPager viewPager;
    private TabPagerAdapter mAdapter;
    private ActionBar actionBar;


    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);





        Log.d(MainActivity.TAG, "OnCreate = MainActivity (Pager");
        viewPager = (ViewPager) findViewById(R.id.pager );
        actionBar = getActionBar();
        mAdapter = new TabPagerAdapter(getSupportFragmentManager());

        viewPager.setAdapter(mAdapter);
        actionBar.setHomeButtonEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        for (String tabsNames : tabMenu) {
            actionBar.addTab(actionBar.newTab().setText(tabsNames).setTabListener(this));
        }
        viewPager.setOnPageChangeListener(this);

    }

    //  public void transDialog(){
    //      Dialog mDialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
    //  }





    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        viewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {

    }




    @Override
    public void onPageScrollStateChanged(int arg0) {        
    }


    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
    }


    @Override
    public void onPageSelected(int position) {
        actionBar.setSelectedNavigationItem(position);      
    }

}

PagetAdapter.class

public class TabPagerAdapter extends FragmentPagerAdapter {

    private static final String TAG = "myClock";


    public TabPagerAdapter(FragmentManager fm) {
        super(fm);
        // TODO Auto-generated constructor stub
    }

    @Override
    public Fragment getItem(int index) {
        Log.d(TAG, " CLASS : TabPagerAdapter");
        switch (index) {
        case 0:

            return new ListFragment();
        case 1:
            return new ClockFragment();
        case 2:
            return new SettingFragment();

        default:
            break;
        }       
        Log.d(TAG, " CLASS : TabPagerAdapter = "+index);
        return null;
    }


    @Override
    public int getCount() {
        return 3;
    }

}

最佳答案

for (String tabsNames : tabMenu) {
    actionBar.addTab(actionBar.newTab().setText(tabsNames).setTabListener(this));
}

将其更改为:

for (String tabsNames : tabMenu) {
    actionBar.addTab(actionBar.newTab().setText(tabsNames).setTabListener(this).setIcon(resources.getDrawable(<drawable_id>));
}

也许,您应该首先创建一个包含可绘制 ID 的数组,然后在“for”循环中使用类似 .setIcon(resources.getDrawable(icons[i])) 的 id

如果您已经将图标的可绘制对象放入相应的文件夹中,您可以给我它们的名称,我将向您展示完整的代码。

关于java - 如何使用 fragment 自定义选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25386215/

相关文章:

android - columnCount 必须大于或等于每个子项的 LayoutParams 中定义的所有网格索引(和跨度)的最大值

android - 如何在 Android 中调试多线程?

java - 我想对两个不同的 fragment 使用相同的 xml 文件

java - ViewPager不显示Fragment

java - 如何将场注入(inject)与 Action 组合一起使用?

java - 如何从 maven Central 构建 nifi 处理器 nar 文件和依赖项

java - 如果只在对象初始化时分配内存,类成员变量(实例变量)如何初始化?

java - Jenkins 无法识别 Java 1.6

android - XML 中的 ExpandableListView 定义

java - android: 尝试转换 fragment 时出现 ClassCastException