帝乙Android笔记之一

知识点:

1.fragment的添加与替换; 知识点链接

2.fragment属性public final boolean isAdded();知识点链接

   如果该Fragment对象被添加到了它的Activity中,那么它返回true,否则返回false。

3.【Android动画】之Tween动画 (渐变、缩放、位移、旋转);知识点链接

4.setSelected知识点:知识点链接

   Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解

5.system.currentTimeMillis() 获得当前的时间;知识点链接

6.TabFragment解决方案;知识点链接

错误:

1.   v7包报错:E:\library_one\appcompat_v7\res\values-v21\themes_base.xml:191: error: Error: 

No resource found that matches the given name: attr 'android:colorPrimaryDark'.
解决办法:导入5.0的sdk
eclipse中的v7项目: project.properties中target=android-21   意思是必须是5.0来编译

2.Type mismatch: cannot convert from FragmentAccount to Fragment
错误提示:无法将MainFragment (Fragment的子类)强制转换成Fragment
解决方法:在原来的MainFragment中把
import android.app.Fragment;
更改为:
import android.support.v4.app.Fragment;

public class MainActivity extends FragmentActivity implements FragmentInterface {
	
	private long exitTime = 0;
	public Fragment[] fragments;
	private Button[] mTabs;
	private int index;//代表每个页面
	private int lastTabIndex;
	private int currentTabIndex;// 当前页面
	private FragmentAccount fragmentaccount;
	private FragmentNote fragmentnote;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
		initTab();
	}

	private void initView() {
		mTabs = new Button[2];
		mTabs[0] = (Button) findViewById(R.id.btn_home);
		mTabs[1] = (Button) findViewById(R.id.btn_channel);
		mTabs[0].setSelected(true);//默认开启页面

	}

	private void initTab() {
		fragmentaccount = new FragmentAccount();
		fragmentaccount.setFragmentInterface(this);
		fragmentnote = new FragmentNote();
		fragmentnote.setFragmentInterface(this);
		fragments = new Fragment[] { fragmentaccount, fragmentnote };
		//获取一个fragment
		getSupportFragmentManager().beginTransaction()
				.add(R.id.fragment_container, fragmentaccount).commit();

	}

    //此方法点击即可调用
	public void onTabSelect(View view) {
		System.out.println("onTabSelect+点击");
		if (view != null) {
			switch (view.getId()) {
			case R.id.btn_home:
				index = 0;
				break;
			case R.id.btn_channel:
				index = 1;
				break;

			}

		}
		// fragment替换
		FragmentTransaction trx = getSupportFragmentManager()
				.beginTransaction();
		if (lastTabIndex == 2) {
			lastTabIndex = 0;
			if (!fragments[index].isAdded()) {
				trx.add(R.id.fragment_container, fragments[index]);
			}
			trx.show(fragments[index]).commit();
		} 
		//成立则切换页面
		else if (currentTabIndex != index) {
			if (index > currentTabIndex) {
				trx.setCustomAnimations(R.anim.slide_left_in,
						R.anim.slide_left_out);
			} else {
				trx.setCustomAnimations(R.anim.slide_right_in,
						R.anim.slide_right_out);
			}
			trx.hide(fragments[currentTabIndex]);
			//判断fragment是否添加进入activity
			if (!fragments[index].isAdded()) {
				trx.add(R.id.fragment_container, fragments[index]);
			}
			trx.show(fragments[index]).commit();
		}
		//默认是否处于被选择状态
		mTabs[currentTabIndex].setSelected(false);
		mTabs[index].setSelected(true);
		currentTabIndex = index;

	}

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			if (lastTabIndex == 2) {
				onTabSelect(null);
				return true;
			}
			//获取当前时间单位毫秒
			if ((System.currentTimeMillis() - exitTime) > 2000) {
				Toast.makeText(MainActivity.this, "再按一次退出", Toast.LENGTH_LONG).show();
				exitTime = System.currentTimeMillis();
				return true;
			} else {
				MainActivity.this.finish();
				return true;
			}
		}
		return super.onKeyDown(keyCode, event);
	}
/**
 * 用于记住fragment滑动位置及物理返回按键的分别控制
 */
	@Override
	public void switchSecondChannel(ChannelListener channelType) {
		lastTabIndex = 2;
		FragmentTransaction trx = getSupportFragmentManager()
				.beginTransaction();

		trx.setCustomAnimations(R.anim.slide_left_in, R.anim.slide_left_out);

		trx.hide(fragments[currentTabIndex]);
		
	}


}
原码在此链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值