歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android基礎教程:促進AlertDialog通用化的另一種實現方式

Android基礎教程:促進AlertDialog通用化的另一種實現方式

日期:2017/3/1 11:09:05   编辑:Linux編程
在Android的技術文檔中,關於AlertDialog的創建,有如下的代碼。http://developer.android.com/guide/topics/ui/dialogs.html
  1. final CharSequence[] items = {"Red", "Green", "Blue"};
  2. AlertDialog.Builder builder = new AlertDialog.Builder(this);
  3. builder.setTitle("Pick a color");
  4. builder.setItems(items, new DialogInterface.OnClickListener() {
  5. public void onClick(DialogInterface dialog, int item) {
  6. Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
  7. }
  8. });
  9. AlertDialog alert = builder.create();

參照這段代碼可以很簡單的構建自己的包含列表的對話框。但是有一點小小的遺憾,就是在setItems中設定的DialogInterface.OnClickListener的onClick中取得選中項目的時候,利用了onClick的參數和尾部的items的信息。作為例子當然沒有問題,但是如果想將這部分代碼通用的時候就會有困難,解決辦法應該有很多,這裡向大家推薦以下的方法。

先上代碼

  1. AlertDialog createAlertDialog(final int dialog_id, CharSequence[] items, OnItemClickListener listener){
  2. AlertDialog.Builder builder = new AlertDialog.Builder(activity);
  3. builder.setTitle(dialog_id);
  4. builder.setItems(items, null);
  5. builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
  6. @Override
  7. public void onCancel(DialogInterface dialog) {
  8. activity.removeDialog(dialog_id);
  9. }
  10. });
  11. AlertDialog dialog = builder.create();
  12. dialog.getListView().setOnItemClickListener(listener);
  13. return dialog;
  14. }

主要的變化就是沒有直接使用AlertDialog.Buider的setItems中Listener,而是取得ListView後指定OnItemClickListener。它的聲明如下:

void onItemClick(AdapterView<?> parent, View view, int position, long id)

參數中有ListView的信息,因此可以相對簡單的中自身,而不是外部取得信息。

Copyright © Linux教程網 All Rights Reserved