實現不同碎片間的切換 & 連續點擊兩次退出當前應用 - P2P金融APP01—頁面架構


不否認努力,繼續加油!
學習整理重點、盲區,筆記如下:乾乾巴巴,麻麻賴賴,一點都不圓潤……

day01

內容

1. 整體架構;

  1. 上邊是 FrameLayout;填充4個不同的碎片;
  2. 下面是 RadioGroup;
    在這裏插入圖片描述

2. 創建各碎片及其佈局;

public class HomeFragment extends Fragment {
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		View view = View.inflate(getActivity(), R.layout.fragment_home, null);
		……

3. 實現不同碎片間的切換;

  1. 不建議選擇 replace() 來替換fragment ?

  2. replace() 是 remove()—>add() 每次切換的時候,Fragment都會重新實例化,重新加載一遍數據,

  3. 所以通過切換 hide(),add() 另一個 Fragment,切換時只需hide() 當前,show() 另一個。

  4. 動態加載碎片

    FragmentManager fragmentManager = this.getSupportFragmentManager();
    transaction = fragmentManager.beginTransaction();
    if (homeFragment == null) {
        //創建對象以後,並不會馬上調用生命週期方法。而是在commit()之後,方纔調用
        homeFragment = new HomeFragment();
        transaction.add(R.id.fl_main, homeFragment);
    }
    transaction.show(homeFragment);
    transaction.commit();
    
  5. 投機
    每次點擊都隱藏 全部的 碎片,而後在進行其點擊事件(顯示該顯示的頁面、響應點擊的底部 button);

  6. 設置 TextView 的顏色字體

    如果設置的顏色是 values - colors 中的顏色,那麼

    tvMainMore.setTextColor(getResources().getColor(R.color.home_back_unselected));
    //這種方式也可以
    tvMainMore.setTextColor(ContextCompat.getColor(this, R.color.home_back_unselected));
    

4. 連續點擊兩次退出當前應用;

  1. private boolean flag = true;
    private static final int WHAT_RESET_BACK = 1;
    private Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case WHAT_RESET_BACK:
                    flag = true;//復原
                    break;
            }
        }
    };
    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && flag) {
            Toast.makeText(MainActivity.this, "再點擊一次,退出當前應用", Toast.LENGTH_SHORT
            flag = false;
            //發送延遲消息
            handler.sendEmptyMessageDelayed(WHAT_RESET_BACK, 2000);
            return true;
        }
        return super.onKeyUp(keyCode, event);
    }
    
  2. 爲了避免出現內存的泄漏,需要在 onDestroy() 中,移除所有未被執行的消息

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //方式一:移除指定id的所有的消息
        //handler.removeMessages(WHAT_RESET_BACK);
        //方式二:移除所有的未被執行的消息
        handler.removeCallbacksAndMessages(null);
    }
    

盲區

  1. 聲明:本博客根據尚硅谷項目實戰: 硅谷金融.學習整理;
  2. 對於碎片的加載有點遺忘;transaction.add(R.id.fl_main, homeFragment); 動態的把 homeFragment 添加到對應頁面的 FrameLayout 中;
  3. 設置文本顏色方法:tvMainMore.setTextColor(ContextCompat.getColor(this, R.color.home_back_unselected));
  4. 重寫 onKeyUp() ;

其他筆記

金融App

  1. 金融APP01—頁面架構.
  2. 金融APP02—主頁及工具類創建

商城

Android項目實戰—— 商城APP.

新聞

Android項目實戰—— 新聞APP.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章