2012年11月18日 星期日

說說,App上傳筆記。調用DialogFragment的方法。

宣傳一下,因為最近辦了visa卡,所以終於可以開辦google play帳戶了,
上傳以前一個用來尋找北方的app,修改為eclipse更新過後格式,並且加上也可以尋找天頂的功能,我想對於觀星族或是有定位需求的人們應該會很方便。

下載網址: 點擊我。
QR Code:

後來發現上傳app到google play上面其實滿容易的,以下重點摘要:

首先,我們必須要有個開發者帳號,如何申請?請參考這裡或是這裡也有詳細的教學。

  1. 最重要的是我們必須要先把apk弄成可以上傳的格式,我們先看這張圖:

    首先對著專案點選右鍵,
    會在androidTools中會找到Export Signed Application Package的選項,
    點選之後會需要一個keyStore輸入,其中會提示需要創立新的還是使用舊的,
    如果沒有創立過的朋友,建議就弄個新的唄。記得創立的密碼要記住。
    都輸入完畢之後,最後會選擇匯出的位置,把這個位置記起來。
  2. 進入開發人員的後台,選定剛剛那個位置的apk上傳。
    這裡要注意,不是專案裡面bin資料夾的那個apk喔!(要不會不給上傳)
  3. 你也有可能會遇到他說會有未知的錯誤,要我們稍等,這好像很多人遇過,
    直接重新登入,或是等一下即可。
  4. 到這裡結束了嗎?錯!!
    上架之前還有一堆設定要做,包括要給高解析度應用程式圖示,以及如果有宣傳文字就必須要有宣傳圖片等等,最重要的還有各國的翻譯(當然是可以用google翻譯啦..)
  5. 高解析度應用程式圖示格式如下:
    512 x 512
    32 位元 PNG 或 JPEG
    大小上限:1024 KB

    我被他搞很久...
  6. 當設定完成之後,按下"發布",系統會自動檢查有那裡沒有填好的。
    確定都可以準備發布之前,要注意的,
    在apk上傳的頁面那邊,要記得啟用我們上傳的apk,
    因為之後版本更新的動作可以用來配合發布的版本管理動作。
    所以這個動作千萬不要忘記哩!
  7. 發布之後,不會馬上搜尋到這個app,
    大概是在做系統檢查吧?大概要等幾個小時之後才會有內容出現。

以上。



接著我們來放個最近在玩的Fragment,我快被他搞死了!哈哈!

這是DialogFragment,參考Develop的作法實作的一個,
按下返回按鍵即會跳處確定離開的詢問dialog。

首先我們必須架構一個DialogFragment.java檔,其中有些string.xml的內容可自行發揮,我便不放上來,然後在點擊事件中,會與Activity互動,這邊先不用急著除錯,等等在Acrivity中實作哩:

package susan.idea.compass_north_v001;

import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager;

public class EndMessageFragment extends DialogFragment implements
        android.content.DialogInterface.OnClickListener {

    /**
     * 初始化這個DialogFragment
     * 
     * @param tagMap
     *            必須是一個String[2][n]的形式包裝的Array 作為傳入參數(HashMap形式)用途.
     * @return 返回一個 DialogFragment.
     */
    public static EndMessageFragment newInstance(String[]... tagMap) {
        EndMessageFragment frag = new EndMessageFragment();
        Bundle args = new Bundle();
        if (tagMap != null && tagMap.length == 2 && tagMap[0].length > 0) {// 檢查有無符合格式
            for (int n = 0; n < tagMap[0].length; n++) {
                args.putString(tagMap[0][n], tagMap[1][n]);
                frag.setArguments(args);
            }
        }
        return frag;
    }

    @Override
    public void dismiss() {
        // TODO Auto-generated method stub
        super.dismiss();
    }

    @Override
    public void show(FragmentManager manager, String tag) {
        // TODO Auto-generated method stub
        super.show(manager, tag);
    }

    @Override
    public void onCancel(DialogInterface dialog) {
        // TODO Auto-generated method stub
        super.onCancel(dialog);
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Builder mBuilder = new Builder(getActivity());
        mBuilder.setTitle(R.string.dialog_title);
        mBuilder.setMessage(R.string.msg_exit);
        mBuilder.setPositiveButton(android.R.string.ok, this);
        mBuilder.setNegativeButton(android.R.string.cancel, this);

        return mBuilder.create();
    }

    @Override
    public void onClick(DialogInterface dialog, int which) {
        switch (which) {
        case DialogInterface.BUTTON_POSITIVE:
            ((MainActivity)getActivity()).doPositiveClick();
            break;
        case DialogInterface.BUTTON_NEGATIVE:
            ((MainActivity)getActivity()).doNegativeClick();
            break;
        default:
            break;
        }

    }

}


接著,我們要在Activity中調用,必須要注意的是,因為我們使用Fragment,
所以相對也要使用FragmentActivity(如果有錯或是有其他方法請指正,感恩)。

把default的Activity改成FragmentActivity其實很簡單,就直接改名字就好,因為方法都一樣(繼承來的著唄!),改完之後把import錯誤的內容改一改就不會有error message了。

因為我是設定在按下返回按鍵之後,所以程式碼寫在onBackPressed()之中:

@Override
    public void onBackPressed() {
        showDialog("dialog",EndMessageFragment.newInstance());
        // super.onBackPressed();
    }

    /** 顯示DialogFragment 注意需要運行在FragmentActivity環境下 */
    void showDialog(final String DIALOG_TAG,DialogFragment mFragment) {

        // DialogFragment.show() will take care of adding the fragment
        // in a transaction. We also want to remove any currently showing
        // dialog, so make our own transaction and take care of that here.
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        Fragment prev = getSupportFragmentManager().findFragmentByTag(
                DIALOG_TAG);
        if (prev != null) {
            ft.remove(prev);
        }
        ft.addToBackStack(null);

        // Create and show the dialog.
        
        mFragment.show(ft, DIALOG_TAG);
    }

    public void doPositiveClick() {
        finish();
    }

    public void doNegativeClick() {

    }

這裡實做了三個方法,一個是避免dialog一直重複跳出(開關的方法),另外兩個是dialog的點擊事件。自己的經驗是,把點擊事件寫在fragment裡面其實也沒差,不過官方的文檔既然都這樣寫了,我們就如實照辦啦~

以上。下台一鞠躬,


沒有留言:

張貼留言

你好,我是小書,如果文章內容有錯誤,或是看到有建議以及任何感想時,歡迎提出分享,我們一起學習一起努力。

追蹤者