2015年11月21日 星期六

[Android] ContextCompat without getColor method



由於Android舊有的功能 getResources().getColor() 已經被棄用,新的 API 23 新增了ContextCompat.getColor() ,以取代舊有功能。

但本人發現,以往的Project當使用ContextCompat類別時,並沒有getColor這個method,原因是舊有的android-support-v4.jar library並沒有上述方法,需要被更新,更新方法如下:


1. 開設新的Android Project,並選用Android 6.0。

2. 到libs 項目下,Copy "android-support-v4.jar"。

3. 到自己舊有project的libs項目下貼上,若已存在,點選取代全部即可;
    若本身不存在,就需要在貼上後,到 Project -> Properties -> Resource -> Java Build Path -> Order and Export -> 確認自己有冇已勺選 "android-support-v4.jar"
 (通常android-support-v4.jar會在放Android Private Libraries裡,可到Libraries中確認 ) 







2015年11月17日 星期二

[Java] HeapSort with Linked List




  1. /**
  2.  * @author Kong Yin Lam - NMC Year2 Student - 17/11/2015
  3.  */

  4. import java.util.*;
  5. public class HeapSortWithLinkedList {

  6.     public static void main(String[] args) {
  7.      
  8.         int totalOfelement = 10;                   // assume the total of elements
  9.         /* --------------------------------------------------------------------*/
  10.         LinkedList list = new LinkedList();        // creat a LinkedList object
  11.         Random rand = new java.util.Random();
  12.         for(int i=0; i<totalOfelement; i++){
  13.            list.addItem(rand.nextInt(100));        // add number into LinkedList
  14.         }
  15.         /* --------------------------------------------------------------------*/
  16.         System.out.print("unsorted :\t");
  17.         list.printAll();                           // print a unsorted set of numbers
  18.         /* --------------------------------------------------------------------*/
  19.         System.out.print("\nsorted\t :\t");
  20.         HeapSort hs = new HeapSort();              // creat a HeapSort object
  21.                  hs.init(list);                    // pass linked list for initialization
  22.                  hs.startSort();                   // start heap sorting
  23.                
  24.         list.printAll();                           // print a sorted set of numbers
  25.     }
  26. }

  27. class HeapSort{
  28.    private LinkedList list;
  29.    private int length;
  30.    public HeapSort(){}
  31.    public void init(LinkedList list){
  32.       this.list = list;
  33.       this.length = list.returnLength();
  34.    }
  35.    public void startSort(){
  36.           for(int i=length/2-1; i>=0; i--){
  37.                heapify(i, length);  
  38.           }
  39.           for(int i=length-1; i>0 ; i--){
  40.                swap(0, i);           // swap the first element(biggest) to the sorted group in each time
  41.                heapify(0, i);        // check maxHeap's properties with unsorted group
  42.           }
  43.    }
  44.    public void heapify(int root, int length){
  45.        int left = root*2+1;          // left Child  -> n*2+1
  46.        int right = root*2+2;         // Right Child -> n*2+2
  47.        int maxHeap = root;           // assume root is largest
  48.      
  49.        /* check whether it fulfills the maxHeap's properties */
  50.        maxHeap = left<length && list.returnNodeByIndex(left).returnValue()>list.returnNodeByIndex(maxHeap).returnValue() ? left : maxHeap;
  51.        maxHeap = right<length &&list.returnNodeByIndex(right).returnValue()>list.returnNodeByIndex(maxHeap).returnValue() ? right : maxHeap;
  52.      
  53.        if(maxHeap!=root){            // It means not fulfill
  54.           swap(root, maxHeap);       // swap
  55.           heapify(maxHeap, length);  // check again
  56.        }      
  57.    }
  58.    public void swap(int i, int j){
  59.         int tmp = list.returnNodeByIndex(i).returnValue();
  60.         list.returnNodeByIndex(i).setValue(list.returnNodeByIndex(j).returnValue());
  61.         list.returnNodeByIndex(j).setValue(tmp);
  62.    }
  63. }

  64. class LinkedList{
  65.     private Node head;
  66.     private int length;
  67.     public LinkedList(){}
  68.     public void addItem(int value){
  69.          if(length==0)     // It means no element in the list
  70.              head = new Node(value);    
  71.          else
  72.              this.returnLastNode().appendNode(new Node(value));
  73.          length++;
  74.     }
  75.     public Node returnLastNode(){
  76.         Node tmp = head;
  77.         while(tmp.returnNext()!=null){
  78.             tmp = tmp.returnNext();
  79.         }
  80.         return tmp;
  81.     }
  82.     public void printAll(){
  83.         Node tmp = head;
  84.         for(int i=0; i<length; i++){
  85.            System.out.print(tmp.returnValue()+"\t");
  86.            tmp=tmp.returnNext();
  87.         }
  88.     }
  89.     public Node returnNodeByIndex(int index){
  90.         Node tmp = head;
  91.         for(int i=0; i<index; i++){
  92.             tmp = tmp.returnNext();
  93.         }
  94.         return tmp;
  95.     }
  96.     public int returnLength(){
  97.         return this.length;
  98.     }
  99. }

  100. class Node{
  101.     private Node next;
  102.     private int value;
  103.     public Node(int value){
  104.           next=null;
  105.           this.value = value;
  106.     }
  107.     public void appendNode(Node node){this.next = node;}
  108.     public void setValue(int value){this.value = value;}
  109.     public Node returnNext(){return this.next;}
  110.     public int returnValue(){return this.value;}
  111. }
  112.    



2015年11月13日 星期五

[JQuery] easyui 同 jquery ui 衝突 (autocomplete和draggable,droppable共用問題)


我在使用 JQuery 的 autocomplete, drag and drop 功能時, 發現當引入了 easyui 同 jquery ui library 時會令到彼此之間的功能無法使用,  原因是兩者都是基於jQuery編寫的, 部分方法同參數名會有重複。

網上有很多解說都說要把easyui內的draggable和droppable改名, 此舉對於很多人說可能相當麻煩和難明, 所以, 我發現有以下方便的做法:



1. 照引入easyui library  
  <script src="http://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>   


2. 到下列網址下載custom的 jquery ui library
但切記不要勾選 
Interactions(Draggable,Droppable,Resizable,Selectable,Sortable)
否則以上方法和參數會與easyui library發生沖突
http://jqueryui.com/download/#!version=1.11.4&components=1111000001111011111111111111111111111

3. 解壓檔案, 並只抽取 jquery-ui.min.js 使用


4. 引入 custom jquery ui library
<script src="js/jquery-ui.min.js"></script>

完成:)