仿网易新闻的ViewpagerIndicator

本文详细介绍了如何使用ActionBarSherlock和ViewPager实现Android应用中的TabView页面切换功能,包括布局设计、代码实现及遇到的问题解决。通过实践,熟悉了ActionBarSherlock的用法,并成功实现了页面间的数据交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以前写过类似的效果,但是是使用viewpagerindicator的开源框架来完成的.

今天刚巧看了一篇博客(http://blog.youkuaiyun.com/xiaanming/article/details/9971721),打算实现一下,顺便也熟悉一下ActionBarSherlock的用法.

使用ViewPagerIndicator的方式可以参考:http://blog.youkuaiyun.com/xiaanming/article/details/10766053

ActionBarSherlock

ActionBar是3.0以后才有的,如果要向下兼容,就要用到ActionBarSherlock的jar包了.下载地址https://github.com/JakeWharton/ActionBarSherlock

ActionBarSherlock的导入和一般lib一样,但是需要注意:V7包的V4包会和ActionBarSherlock的V4包冲突,可以不用V7包.

还有就是所有的style中的theme都要改成Theme.Sherlock前缀的.如下



遇到的问题:MainActivity报错 ======The hierarchy of the type is inconsistent========

原因:在eclipse里建了两个项目,分别是A projiect和B projiect,项目A引用了一些JAR包,然后项目B引用了项目A,但是B没有引用A的JAR包

解决:原来是当前项目的lib中V4包没有build....


开始动工

1.activity布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.mio.tabviewpage.MainActivity" >

    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
         />

</RelativeLayout>




2.activity代码

/**
 * 需要实现两个监听
 * TabListener:				tab改变--->Viewpage改变
 * OnPageChangeListener:	ViewPage改变--->tab改变
 * @author mio
 *
 */
public class MainActivity extends SherlockFragmentActivity implements
		ActionBar.TabListener,OnPageChangeListener {

	private String[] mTabTitles = { "首页", "新闻", "关注", "声音" };
	private ViewPager mViewPager;
	/**
	 * 装载Fragment的容器,我们的每一个界面都是一个Fragment
	 */
	private List<Fragment> mFragmentList;
	private ActionBar mActionBar;

	@Override
	protected void onCreate(Bundle arg0) {
		super.onCreate(arg0);
		setContentView(R.layout.activity_main);
		init();
	}

	private void init() {
		mViewPager = (ViewPager) findViewById(R.id.vp);
		mFragmentList =  new ArrayList<Fragment>(); 
		mViewPager.setAdapter(new TabPagerAdapter(getSupportFragmentManager(),
				mFragmentList));

		// 获取ActionBar实例我们使用getSupportActionBar()方法
		mActionBar = getSupportActionBar();
		// 隐藏Title
		mActionBar.setDisplayShowTitleEnabled(false);
		// 隐藏Home logo
		mActionBar.setDisplayShowHomeEnabled(false);
		// 设置ActionBar的导航模式为Tab
		mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
		// 设置监听
		mViewPager.setOnPageChangeListener(this);

		// 为ActionBar添加Tab并设置TabListener
		// 为ActionBar添加Tab并设置TabListener
		for (int i = 0; i < mTabTitles.length; i++) {
			ActionBar.Tab tab = mActionBar.newTab();
			tab.setText(mTabTitles[i]);
			tab.setTabListener(this);
			mActionBar.addTab(tab, i);
		}

		// 将Fragment加入到List中,并将Tab的title传递给Fragment
		for (int i = 0; i < mTabTitles.length; i++) {
			Fragment fragment = new ItemFragment();
			// 将tab的名称传递给Fragment
			Bundle args = new Bundle();
			args.putString("arg", mTabTitles[i]);
			fragment.setArguments(args);

			mFragmentList.add(fragment);
		}

	}

	/**
	 * 点击ActionBar Tab的时候切换不同的Fragment界面
	 */
	@Override
	public void onTabSelected(Tab tab, FragmentTransaction ft) {
		mViewPager.setCurrentItem(tab.getPosition());
	}

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

	}

	@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 arg0) {
		// 滑动ViewPager的时候设置相对应的ActionBar Tab被选中
		mActionBar.setSelectedNavigationItem(arg0);

	}
}

3.Frangment代码

  
    @Override  
    public View onCreateView(LayoutInflater inflater, ViewGroup container,  
            Bundle savedInstanceState) {  
          
        View contextView = inflater.inflate(R.layout.fragment_item, container, false);  
        TextView mTextView = (TextView) contextView.findViewById(R.id.textview);  
          
        //获取Activity传递过来的参数  
        Bundle mBundle = getArguments();  
        String title = mBundle.getString("arg");  
          
        mTextView.setText(title);  
          
        return contextView;  
    }  
  
    @Override  
    public void onActivityCreated(Bundle savedInstanceState) {  
        super.onActivityCreated(savedInstanceState);  
    }  
  


4.adapter代码

public class TabPagerAdapter extends FragmentStatePagerAdapter {

	private List<Fragment> list;

	public TabPagerAdapter(FragmentManager fm,List<Fragment> list) {
		super(fm);
		this.list=list;
	}

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

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

}

5.fragment的布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="127dp"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium" />

</RelativeLayout>

最终效果图:




内容概要:本文档详细介绍了Analog Devices公司生产的AD8436真均方根-直流(RMS-to-DC)转换器的技术细节及其应用场景。AD8436由三个独立模块构成:轨到轨FET输入放大器、高动态范围均方根计算内核和精密轨到轨输出放大器。该器件不仅体积小巧、功耗低,而且具有广泛的输入电压范围和快速响应特性。文档涵盖了AD8436的工作原理、配置选项、外部组件选择(如电容)、增益调节、单电源供电、电流互感器配置、接地故障检测、三相电源监测等方面的内容。此外,还特别强调了PCB设计注意事项和误差源分析,旨在帮助工程师更好地理解和应用这款高性能的RMS-DC转换器。 适合人群:从事模拟电路设计的专业工程师和技术人员,尤其是那些需要精确测量交流电信号均方根值的应用开发者。 使用场景及目标:①用于工业自动化、医疗设备、电力监控等领域,实现对交流电压或电流的精准测量;②适用于手持式数字万用表及其他便携式仪器仪表,提供高效的单电源解决方案;③在电流互感器配置中,用于检测微小的电流变化,保障电气安全;④应用于三相电力系统监控,优化建立时间和转换精度。 其他说明:为了确保最佳性能,文档推荐使用高质量的电容器件,并给出了详细的PCB布局指导。同时提醒用户关注电介质吸收和泄漏电流等因素对测量准确性的影响。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值