談談-Android中的介面回調技術

來源:互聯網
上載者:User

標籤:建立   無法   常見   static   exce   roi   except   edit   服務端   

 

Android中的介面回調技術有很多應用的情境,最常見的:Activity(人機互動的連接埠)的UI介面中定義了Button,點擊該Button時,執行某個邏輯。

下面參見上述執行的模型,講述James對Android介面回調技術的理解(結合前人的知識和自己的實踐)。

 

使用一個比喻很形象地說明:用戶端有個疑問打電話請教服務端,但服務端無法現場給出解答,相互之間約定:服務端一旦有答案,使用電話的方式反饋給用戶端。

以上有三個主體:用戶端、服務端和介面(方式)。

介面回調的原理框圖說明:

 

Demo介面如下:

實際效果如下:

 

其中ToDoListActivity的布局XML檔案設計為:使用fragment標籤填充。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.demo.ToDoListActivity" >    <fragment        android:id="@+id/fragment_new_item"        android:name="com.demo.NewItemFragment"        android:layout_width="match_parent"        android:layout_height="wrap_content" />    <fragment        android:id="@+id/fragment_todo_list"        android:name="com.demo.ToDoListFragment"        android:layout_width="match_parent"        android:layout_height="wrap_content" /></LinearLayout>

 

Demo原始碼:

package com.demo;import android.app.Activity;import android.app.Fragment;import android.os.Bundle;import android.text.TextUtils;import android.view.KeyEvent;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnKeyListener;import android.view.ViewGroup;import android.widget.EditText;/** * <功能描述> 為New Item定義的Fragment *  * @author Administrator */public class NewItemFragment extends Fragment {    private static final String TAG = NewItemFragment.class.getSimpleName();    /**     * <功能描述> 步驟1:建立指定的介面     *      * @author Administrator     */    public interface OnNewItemAddedListener {        // 步驟2:建立介面中的相關方法        public void onNewItemAdded(String newItem);    }
// 步驟3:聲明回調介面的對象,介面類對象 private OnNewItemAddedListener onNewItemAddedListener;
@Override public void onAttach(Activity activity) { super.onAttach(activity); try { // 步驟4:擷取父Activity,為聲明的介面對象賦值 onNewItemAddedListener = (OnNewItemAddedListener) getActivity(); } catch (Exception e) { throw new ClassCastException(activity.toString() + " must implement OnNewItemAddedListener"); } }
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // 建立或填充Fragment的UI,並返回View對象 View contentView = inflater.inflate(R.layout.new_item_fragment, container, false); final EditText etContent = (EditText) contentView .findViewById(R.id.et_content); etContent.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { LogUtil.d(TAG, "KeyEvent.ACTION_DOWN"); if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) || (keyCode == KeyEvent.KEYCODE_ENTER)) { LogUtil.d(TAG, "KeyEvent.KEYCODE_ENTER"); if (!TextUtils.isEmpty(etContent.getText().toString())) { LogUtil.d(TAG, "content:>" + etContent.getText().toString() + "<"); String content = etContent.getText().toString(); // 步驟5:建立某種情境,使用該介面回調方法 onNewItemAddedListener.onNewItemAdded(content); etContent.setText(""); return true; } } } return false; } }); return contentView; }}

使用者和介面UI互動的Activity原始碼:

package com.demo;import android.app.Activity;import android.app.FragmentManager;import android.os.Bundle;import android.widget.ArrayAdapter;import com.demo.NewItemFragment.OnNewItemAddedListener;import java.util.ArrayList;/** * <功能描述> 步驟6:在其他類中使用,並實現該介面 *  * @author Administrator */public class ToDoListActivity extends Activity implements        OnNewItemAddedListener {    private static final String TAG = ToDoListActivity.class.getSimpleName();    private ArrayList<String> mTodoItem;    private ArrayAdapter<String> mArrayAdapter;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initView(); initData(); // 擷取FragmentManager執行個體,擷取xml檔案中的fragment FragmentManager fragmentManager = getFragmentManager(); ToDoListFragment todoListFragment = (ToDoListFragment) fragmentManager .findFragmentById(R.id.fragment_todo_list); todoListFragment.setListAdapter(mArrayAdapter); } private void initView() { setContentView(R.layout.main); } private void initData() { mTodoItem = new ArrayList<String>(); mArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mTodoItem); } @Override protected void onResume() { super.onResume(); LogUtil.d(TAG, "onResume..."); } @Override public void onNewItemAdded(String newItem) { // 步驟7:實現該介面,並使用其中的功能 mTodoItem.add(0, newItem); mArrayAdapter.notifyDataSetChanged(); }}

上述Demo的ToDoListActivity實現了自訂的NewItemFragment中的介面OnNewItemAddedListener,也就需要實現該介面中的抽象方法。通過下述方法:

// 步驟4:擷取父Activity,為聲明的介面對象賦值onNewItemAddedListener = (OnNewItemAddedListener) getActivity();

將ToDoListActivity執行個體傳遞到了NewItemFragment中,也就是能夠執行ToDoListActivity執行個體中的onNewItemAdded()方法,而這個方法由ToDoListActivity覆寫了(實際執行的是覆寫後的方法和邏輯)。

Android中介面回調技術總結:

Android介面回調方法總共需要執行以下7個步驟:

1. 建立指定的介面類,並建立介面中的相關方法;

2. 在某個類(一般是服務端)中聲明介面對象(建立該介面類對象),即需要在該類中使用該介面;

3. 在使用到該介面對象的情境(一般也是服務端)中為該介面類對象賦值(也就是服務端一般都會執行個體化介面對象,使用用戶端的該介面執行個體初始化);

5. 在該情境中(一般服務端中)使用介面回調中的方法(介面的方法);

6. 上述步驟4中的賦值對象(用戶端傳遞的執行個體對象,方法有多種:new介面執行個體或者用戶端實現該介面)需要實現該介面;

7. 上述步驟6中的類(用戶端),覆寫介面中的方法;

文章出自:http://www.cnblogs.com/CVstyle/p/6216913.html

談談-Android中的介面回調技術

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.