<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    瘋狂

    STANDING ON THE SHOULDERS OF GIANTS
    posts - 481, comments - 486, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    android學習之 intent 實例

    Posted on 2009-11-10 14:02 瘋狂 閱讀(4181) 評論(2)  編輯  收藏 所屬分類: android
          本文通過一個實例來學習intent的部分功能。

    網上也有很多文章講解了intent的用法,自己感覺他的字面意義說到了他的精髓:“目的、意向”,也就是說通過它來告訴應用程序將要做什么,intent正是這樣,android通過Intent機制來協助應用間的交互與通訊,網上的一句話來理解:Intent有兩種基本用法:一種是顯式的Intent,即在構造Intent對象時就指定接收者,這種方式與普通的函數調用類似,只是復用的粒度有所差別;另一種是隱式的Intent,即Intent的發送者在構造Intent對象時,并不知道也不關心接收者是誰,這種方式與函數調用差別比較大,有利于降低發送者和接收者之間的耦合。另外Intent除了發送外,還可用于廣播。本文的例子正式介紹其中的顯示intent,隱式的Intent將在下一篇中學習。
         實例要達到大致的效果:一個頁面顯示用戶列表,其中有一個按鈕來添加用戶。
     用戶列表界面:
     
    添加用戶界面:



    顯示的intent需要明確他的目標Component 也就是intent必須包含具體Component的Name,什么是Component

    大致看下ComponentName源代碼:
    public final class ComponentName implements Parcelable {
        
    private final String mPackage;
        
    private final String mClass;

    構造方法:
     
    public ComponentName(String pkg, String cls)
     
    public ComponentName(Context pkg, String cls)
     
    public ComponentName(Context pkg, Class<?> cls)


    其中有這樣的介紹:
    @param pkg The name of the package that the component exists in.  Can
         * not be null.
         * @param cls The name of the class inside of <var>pkg</var> that
         * implements the component.  Can not be null.
    這個成員變量分別為目標的包和class的name
    因此可以有三種方法夠造ComponentName 例如
    new ComponentName(targetclass.class.getPackage().getName(),targetclass.class.getName()));
    new ComponentName(this,targetclass.class.getName()));
    new ComponentName(this,targetclass.class));
    ---------------------------------
    這樣就構建了我們的意圖,
    但是要通知目標組件實現這個意圖:
     可以使用startActivity(intent)方法來啟動,但是本文使用了startActivityForResult方法,因為我們需要新打開的activity返回數據(新添加的用戶數據),

    此方法的參數:startActivityForResult(Intent intent, int requestCode),
    requestCode是干嘛的呢:文檔是這樣說的:

     
    requestCode If >= 0this code will be returned in
         
    *                    onActivityResult() when the activity exits.

    也就是說如果requestCode>0 我們就可以在目標activity返回的時候執行父窗口(官方叫做originating activity)的onActivityResult方法來處理我們的數據,我們可以使用已經定義好的requestCode,也可以自己定義,在代碼中我直接給賦值為1,正如文檔所說的,我們在用戶類表的activity里面重寫onActivityResult方法來刷新界面,以顯示新添加的用戶。
      下面來看下我們的本實例的兩個activity:
    首先是用戶列表activity:Test1.java:(使用到了simpleAdapter可以見于我的另外一篇文章http://www.tkk7.com/freeman1984/archive/2009/11/06/301475.html
    public class Test1 extends Activity {
        ArrayList
    <HashMap<String, String>> users = new ArrayList<HashMap<String, String>>();

        
    /** Called when the activity is first created. */
        @Override
        
    public void onCreate(Bundle savedInstanceState) {
            
    super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
    final Button adduser = (Button)findViewById(R.id.Button01);
            adduser.setOnClickListener(
    new OnClickListener(){

                
    public void onClick(View v) {
                    Intent addnew 
    = new Intent();
                    addnew.setComponent(
    new ComponentName(Test1.this,Test2.class));
                    startActivityForResult(addnew, 
    1);//通知打開新建用戶界面 ,requestCode>0就行
                }
    }
    );
            initUser();//初始化界面上顯示一個用戶
            updateList();//顯示列表
        }

        
    private void initUser() {
            HashMap
    <String, String> user = new HashMap<String, String>();
            user.put(
    "name""張三");
            user.put(
    "phonenum""tel:15842154687");
            users.add(user);
        }

        
    private void updateList() {
            SimpleAdapter saImageItems 
    = new SimpleAdapter(this,
                    users,
    // 數據來源
                    R.layout.user,//每一個user xml 相當ListView的一個組件 
                    new String[] {"name""phonenum" },
                    
    // 分別對應view 的id
                    new int[] { R.id.name, R.id.phonenum});
            
    // 獲取listview
            ((ListView) findViewById(R.id.userlist)).setAdapter(saImageItems);
        }


        

        @Override
        
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {//重寫回調方法 將新用戶添加到列表中,并刷新界面
            
    // TODO Auto-generated method stub
            super.onActivityResult(requestCode, resultCode, data);
            Bundle newuser 
    = data.getExtras();
            String name 
    = newuser.getString("name");
            String phonenum 
    = newuser.getString("phonenum");
            HashMap
    <String, String> user = new HashMap<String, String>();
            user.put(
    "name", name);
            user.put(
    "phonenum""tel:"+phonenum);
            Log.d(
    "Test1""phonenum:"+phonenum);
            users.add(user);
            updateList();
        }

    }
    注意的不能在startActivityForResult(addnew, 1);后面finish();要不originating實例(列表activity)就不在了。
     新建用戶activity Test2.java
    public class Test2 extends Activity {
        
    /** Called when the activity is first created. */
        EditText newname;
        EditText newphone;
        Button submitbn;
        @Override
        
    public void onCreate(Bundle savedInstanceState) {
            setTheme(android.R.style.Theme_Dialog);
            
    super.onCreate(savedInstanceState);
            setContentView(R.layout.newuser);
            setTitle(
    "new User");
            newname 
    = (EditText)findViewById(R.id.newname);
            newphone 
    = (EditText)findViewById(R.id.newphone);
            submitbn 
    = (Button)findViewById(R.id.submitbn);
            submitbn.setOnClickListener(
    new OnClickListener(){
            
                
    public void onClick(View v) {
                    Intent submiti 
    = new Intent();
                    submiti.setComponent(
    new ComponentName(Test2.this,Test1.class));
                    Bundle user 
    = new Bundle();
                    user.putString(
    "name", newname.getText().toString());
                    user.putString(
    "phonenum", newphone.getText().toString());
                    submiti.putExtras(user);
                    setResult(RESULT_OK, submiti);
    //返回正確 
                    finish();//此方法將會根據resultCode來處理如何關閉acticity
                }
    }
    );
            
            
        }

    }

    本文大致介紹了下顯示的intent 將在下一篇中看看隱式的intent,也就是intent的其他成員變量的使用:intent主要的成員變量如下:
     
    private String mAction;
        
    private Uri mData;
        
    private String mType;
        
    private ComponentName mComponent;
        
    private int mFlags;
        
    private HashSet<String> mCategories;
        
    private Bundle mExtras;

     希望高手指點,共同學習~!


    評論

    # re: android學習之 intent 實例[未登錄]  回復  更多評論   

    2009-11-10 16:20 by 飛天
    學習了!

    # re: android學習之 intent 實例  回復  更多評論   

    2010-01-27 16:05 by 過河卒
    LZ通過代碼學習的方面很見功力啊! PFPF.
    主站蜘蛛池模板: 免费毛片在线视频| 鲁大师在线影院免费观看| 亚洲AV色无码乱码在线观看| 亚洲AV色吊丝无码| 亚洲区精品久久一区二区三区| 亚洲欧洲国产经精品香蕉网| 亚洲男女性高爱潮网站| 亚洲无成人网77777| 精品亚洲AV无码一区二区三区| 亚洲中文字幕无码av在线| 亚洲午夜在线播放| 亚洲精品欧美综合四区| 看全免费的一级毛片| 成人免费观看男女羞羞视频| 一区二区三区免费在线观看| 国产一级黄片儿免费看| 久久免费观看国产精品88av| 亚洲视频免费一区| 成熟女人牲交片免费观看视频| 日韩毛片无码永久免费看| 亚洲成人高清在线| 国产AV无码专区亚洲精品| 亚洲精品视频在线观看视频| 亚洲一区二区三区在线观看蜜桃| 亚洲色大成网站www尤物| 青青青亚洲精品国产| 久99久无码精品视频免费播放| 久久国产精品国产自线拍免费 | 亚洲人成色7777在线观看| 亚洲av永久无码精品国产精品| 久久精品国产亚洲AV高清热| 亚洲熟妇AV一区二区三区浪潮 | 久久精品亚洲一区二区| 亚洲一区二区三区在线观看蜜桃| 亚洲午夜精品一区二区麻豆| 一级毛片人与动免费观看| 一区二区三区福利视频免费观看| 在线观看的免费网站| 亚洲精品国产综合久久一线| 亚洲制服中文字幕第一区| 亚洲免费网站观看视频|