Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 初識Android項目知識點積累

初識Android項目知識點積累

編輯:關於Android編程

1、自定義alertDialog裡面的EditText沒有輸入法:

.getWindow().setContentView(layout)來加載layout。這是默認情況下隱藏軟鍵盤的方法,要重新顯示軟鍵盤,要執行下面這段代碼:
alertDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

.setView(layout)就可以

先後順序:

 setView(layout),
 show(),
 getWindow()/getWindow().setContentView(layout)

在調用show方法前先調用setView(layout),show後再調用window.setContentView(layout),兩個Layout布局應該是相同的。
至於原因,暫時不明,但是確實解決了問題,在EditText上點擊,可以調出軟鍵盤,輸入法了。

例子:

LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.alert_input, null);
AlertDialog dlg = new AlertDialog.Builder(context).create();
dlg.setView(v);
dlg.show();
Window window = dlg.getWindow();
window.setContentView(R.layout.alert_input);//注意這裡用的是R裡面的id
//window.clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

TextView titleTextView = (TextView) window.findViewById(R.id.alert_input_title);

2、常用dialog

Dialog,對話框,一個對話框就是一個小窗口,並不會填滿整個屏幕,通常是以模態顯示,要求用戶必須采取行動才能繼續進行剩下的操作。

Android提供了豐富的對話框支持,它提供了如下4中常用的對話框:
- AlertDialog:警告對話框,使用最廣泛功能最豐富的一個對話框。
- ProgressDialog:進度條對話框,只是對進度條進行了簡單的封裝。
- DatePickerDialog:日期對話框。
- TimePickerDialog:時間對話框。

3、打開一個新的Activity

//=========在Activity中打開另一個Activity
1.  startActivity(new Intent(mContext, MainActivity.class));

//=========在Fregment中打開另一個Activity
2.  Intent intent = new Intent(getActivity(),CardActivity.class);
    getActivity().startActivity(intent);
//========
3.  startActivityForResult()
    /*
    NOTE:
    1. 當程序執行到這段代碼的時候,假若從T1Activity跳轉到下一個Text2Activity,而當這個Text2Activity調用了finish()方法以後,程序會自動跳轉回T1Activity,並根據T2Activity的setResult()方法調用前一個T1Activity中的onActivityResult( )方法。
    2. 在Fragment中應該調用startActivityForResult()的方法
       而不是getActivity().startActivityForResult()
    */

相關函數:

startActivityForResult(Intent intent, Int requestCode)
setResut(int resultCode, Intent intent)
onActivityResult(int requestCode, int resultCode, Intent intent)

例子:

http://www.cnblogs.com/lijunamneg/archive/2013/02/05/2892616.html

使用Intent傳遞參數:

//添加參數          (默認使用的也是Bundle,和第二種方式一樣)
intent.putExtra("key","String");
intent.putExtra("String",xxxxx);    //其中xxxxx需要實現Serializable接口;
//獲取參數
intent.getExtras().getString("key");    //獲取String類型的值
intent.getExtras().getXXXXX("key"); //獲取XXXXX類型的值
intent.getExtras().get("key");  //獲取Object類型的值,此時需要進行強制轉換

//添加Bundle
Bundle bundle=new Bundle();
bundle.putXXX("String",XXXX);
intent.putExtras(bundle);
//獲取Bundle
Bundle bundle = this.getIntent().getExtras();
XXX = bundle.getXXX("String");

6、SharedPreference:

將數據保存至SharedPreferences:

SharedPreferences preferences=getSharedPreferences("user",Context.MODE_PRIVATE);
Editor editor=preferences.edit();
String name="xixi";
String age="22";
editor.putString("name", name);
editor.putString("age", age);
editor.commit();

從SharedPreferences獲取數據:

SharedPreferences preferences=getSharedPreferences("user", Context.MODE_PRIVATE);
String name=preferences.getString("name", "defaultname");
String age=preferences.getString("age", "0");

haredPreferences的四種操作模式:
- Context.MODE_PRIVATE:為默認操作模式,代表該文件是私有數據,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件的內容
- Context.MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內容,否則就創建新文件.
- Context.MODE_WORLD_READABLEContext.MODE_WORLD_WRITEABLE用來控制其他應用是否有權限讀寫該文件.
- MODE_WORLD_READABLE:表示當前文件可以被其他應用讀取.
- MODE_WORLD_WRITEABLE:表示當前文件可以被其他應用寫入.

7、自定義控件提示Use View.isInEditMode() in your custom views to skip code when shown in Eclipse。

我們直接找到“自定義控件”的代碼,然後 解決方法是定位觸發錯誤代碼段,並將造成此錯誤的代碼行用

if(!isInEditMode()){
    //造成錯誤的代碼段
}

包起來,這樣在Eclipse中顯示時將跳過此代碼段而不再出現錯誤。這樣就可以正常預覽layout了。

http://blog.csdn.net/changemyself/article/details/43794725

8、Json的null

在Map中取不存在的鍵值對時不會報異常,只會返回null;

利用jSONObject.get(Object key)方法及get(String key)取不存在的鍵值對時不會報異常,會返回null;

但是利用jSONObject.getxxx(String key)方法取時會報空指針異常

第一種情況是: json包是json-lib包是net.sf.json
怎樣判斷JSONObject返回的是字符串null還是null值.
研究源碼發現.JSONObject裡有一段代碼是當遇到json串中是null的時候.返回JSONNUll.

第二種情況是: org.json的包。這時候發現.返回的null是JSONObject.NUll
兩種包不一樣的返回NUll值

9、在Adapter裡面調用Activity的方法/變量

把activity或者fragment的實例傳入adapter中,然後就可以調用activity或者fragment裡面的方法。
場景:為listview中的item添加適配器,達到自定義item的效果。當點擊item中的時候調用Activity的方法,比如打開另一個Activity。
解決:在Adapter中維持一個對該Activity或Fragment的引用。當實例化這個Adapter時,對其中的這個引用賦值。這樣就可以根據需要調動Activity或者Fragment中的方法。
例如:

Activity:
 public class MyActivity extends Activity
{
public void test(){};
public void test(int position){}
}
BaseAdater:
public class MyBaseAdapter extends BaseAdapter{
MyActivity context;
     public  MyBaseAdapter(MyActivity context){
this.context = context;
}

……
//調用MyActivity的方法。
context.test();
context.text(1);
……

}

http://www.android100.org/html/201306/30/3376.html

//加上上面兩句,可以在觸發Back鍵或者點擊在popupWindow以外的區域時讓其dismiss

pop.setOutsideTouchable(true);//======第一句
pop.setBackgroundDrawable(new BitmapDrawable());//=======第二句

long和int

此部分有待商議:int和long在不同位的操作系統和編譯器分別代表多長的字節?

由int類型轉換為long類型是向上轉換,可以直接進行隱式轉換,但由long類型轉換為int類型是向下轉換,可能會出現數據溢出情況:
主要以下幾種轉換方法,供參考:

1. 強制類型轉換

long ll = 300000;  
int ii = (int)ll;  

2. 調用intValue()方法

long ll = 300000;  
int ii= new Long(ll).intValue();  

3. 先把long轉換成字符串String,然後在轉行成Integer

long ll = 300000;  
int ii = Integer.parseInt(String.valueOf(ll));

這三種方法都比較簡單明了。

javadoc生成

使用/***/注釋,這種就會生成javadoc注釋,可以在類名,方法名、字段名上方輸入/**回車即可自動生成doc模版。

BaseAdapter的getView()調用時機

BaseAdapter的getView()方法的調用時機大致如下:

初始顯示時

listview滾動時

notifyDataSetChanged處理時

每一個item都要調用一次getView();

textview中文字過長時,顯示省略號

設置Textview的屬性

android:ellipsize="middle"  //此處還有其他值,分別在頭部、中間、尾部顯示
android:maxEms="15"         //元素的最大樹木
android:singleLine="true"

Parcelable、Serializable使用與區別

未完待續……

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved